iOS10.3新特性之動態更換APP圖標

iOS 10.3 加入了了更換應用圖標的新功能,當應用安裝后,開發者可以為應用提供多個應用圖標選擇。用戶可以自由的在這些圖標之間切換。這也是 iOS 主屏首次支持應用圖標更換。如下介紹如何更新應用圖標。

一、API介紹

UIApplication 的對象方法,set?Alternate?Icon?Name:?completion?Handler:?可以用來更換應用的圖標,但是還要設置plist文件內容,后面細致講解。

//alternateIconName  參數是應用圖片名字,如果該參數是nil,默認是最初圖標的名字
//completionHandler 是回調,如果更換圖片成功,error 為nil,否則不為nil;
- (void)setAlternateIconName:(NSString *)alternateIconName 
           completionHandler:(void (^)(NSError *error))completionHandler;
討論

在調用此方法時,要用supports?Alternate?Icons 方法,來判斷是否支持換應用圖標。另外還要在plist文件中用 CFBundle?Icons 鍵聲明 primary 和 alternate 圖標,如何設置 CFBundle?Icons 鍵,請參考Information Property List Key Reference

二、Plist文件的配置

下圖是最初應用的圖標。


Snip20170331_5.png

下圖中是plist 文件的設置,最初圖標的名字 和 更新圖標和名字要一一對應。


Snip20170331_1.png
<key>CFBundleIcons</key>  
    <dict>  
        <key>CFBundleAlternateIcons</key>  
        <dict>  
            <key>newIcon</key>  
            <dict>  
                <key>CFBundleIconFiles</key>  
                <array>  
                    <string>newIcon</string>  
                </array>  
                <key>UIPrerenderedIcon</key>  
                <false/>  
            </dict>  
        </dict>  
        <key>CFBundlePrimaryIcon</key>  
        <dict>  
            <key>CFBundleIconFiles</key>  
            <array>  
                <string>Icon</string>  
            </array>  
        </dict>  
    </dict>  

三、代碼實現

如下代碼實現如何更換應用的圖標,主要思路如下
1 系統能否支持更換圖標
2 判斷是否已經更新過圖標
3 更新圖標

- (IBAction)changeIcon:(id)sender {
    
    if ([UIApplication sharedApplication].supportsAlternateIcons) {
        NSLog(@"U can change icon image");
        
        //應用是否更新過圖標
        NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
        
        if (iconName) {
        //setAlertnateIconName方法有二個參數
       //第一個參數是 要換圖標的名字,如果寫nil,系統默認是最初圖標名字
      //第二個參數是 方法執行的回調
            [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
                if (error) {
                    NSLog(@"errpr = %@",error);
                }else{
                
                    NSLog(@"suceess");
                }
            }];
        }else{
            //換圖標
            [[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {
                if (error) {
                    NSLog(@"errpr = %@",error);
                }else{
                    
                    NSLog(@"suceess");
                }
            }];
        }  
    }
    

四、效果圖如下

換圖標效果圖.gif
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容