iOS 10.3新特性之動態替換App Icon

Deft_MKJing宓珂璟發表於2017-03-31

動態更換Icon

這裡寫圖片描述
先看下iOS 10.3下新增的這三個屬性

@interface UIApplication (UIAlternateApplicationIcons)
// If false, alternate icons are not supported for the current process.
@property (readonly, nonatomic) BOOL supportsAlternateIcons NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));

// Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.
- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));

// If `nil`, the primary application icon is being used.
@property (nullable, readonly, nonatomic) NSString *alternateIconName NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
@end


第一個
supportsAlternateIcons 是否支援動態替換

第二個
也就是核心方法,根據配置,替換自己想要的icon,具體引數描述以及介紹大家基本上都知道,按下option進去看看就行了,主要還是涉及到info.plist的配置
官方指定的plist key介紹
這裡寫圖片描述


第三個
替換icon的時候根據該屬性獲取到當前被替換到顯示的icon名稱,例如你沒換的時候就是nil,換了icon1,那麼就顯示icon1



Plist配置以及Icon圖片如何存放

第一步—>設定plist
首先看下info.plist,寫的很詳細了,依葫蘆畫瓢總會吧
這裡寫圖片描述


第二步—>放iCON
首先和一個icon一樣,也就是對應的Primary Icon,直接拖進Asset裡面管理,需要注意的是,需要輪流替換的其他icon不能拖進去啊,不然跑起來,error了,直接和檔案一樣建個資料夾放在目錄下即可,具體的欄位和配置看一眼Demo搞一次就明白了,這裡講再多都沒用


第三步—>程式碼

if (![[UIApplication sharedApplication] supportsAlternateIcons]) {
        NSLog(@"不支援。。。");
        return;
    }
    else
    {
        NSLog(@"支援動態替換");
    }

    NSString *icon = [[UIApplication sharedApplication] alternateIconName];
    if (icon) {
        NSLog(@"icon is exist");
        NSString *changeStr = nil;
        if ([icon isEqualToString:@"IconChange"]) {
            changeStr = @"IconChangeNext";
        }
        [[UIApplication sharedApplication] setAlternateIconName:changeStr completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"error");
            }
            NSLog(@"done");
        }];
    }
    else
    {
        NSLog(@"icon not exist");
        [[UIApplication sharedApplication] setAlternateIconName:@"IconChange" completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"error");
            }
            NSLog(@"done");
        }];
    }


一個特別奇怪的新特性,鬼知道apple要幹嘛,難不成以後手機裡面清一色一個icon,這樣看起來也是很裝B的。。。。。。



Demo地址

相關文章