1. 程式人生 > >Xcode-iOS10.3新特性如何動態修改APP圖示

Xcode-iOS10.3新特性如何動態修改APP圖示

前言

iOS10.3開放了一個新的API,就是更換APP的Icon圖示。說明:使用下面的方法Xcode必須升級到最新的8.3.1。

函式方法

- (void)setAlternateIconName:(NSString *)alternateIconName

           completionHandler:(void (^)(NSError *error))completionHandler;

引數

alternateIconName
這個是替換圖示的名稱,在Info.plist檔案裡面新增一個CFBundleAlternateIcons欄位,如果你想顯示應用的主圖示,則設定欄位的值為nil,鍵的主鍵是plist裡面的CFBundleIcons欄位。
completionHandler


當你執行修改圖示的操作後,系統通過這個block來告知結果。
error
在成功時,此引數的值為零。如果出現錯誤,該引數包含指示所發生的事的alternateiconname屬性的值保持不變的錯誤物件。

說明
使用此方法將應用程式的圖示更改為其主圖示或其替換圖示之一。你可以僅在supportsalternateicons屬性的值是可以改變圖示。
你必須宣告你的應用程式的主要和關鍵的cfbundleicons交替使用你的應用程式的Info.plist檔案圖示。有關如何配置你的應用程式替代圖示,看到關鍵資訊屬性列表的關鍵參考cfbundleicons描述。

更多參考官方文件:https://developer.apple.com/reference/uikit/uiapplication/2806818-setalternateiconname?language=objc



示例

1.新建工程,設定預設APP圖示。


2.配置plist檔案


程式碼如下

<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>AppIcon</string>

</array>

</dict>

</dict>

3.替換圖示的程式碼

- (IBAction)changeAppIconClick:(UIButton *)sender {
    if ([UIApplication sharedApplication].supportsAlternateIcons) {
        NSLog(@"you can change this app's icon");
    }else{
        NSLog(@"you can not change this app's icon");
        return;
    }
    
    NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
    
    if (iconName) {
        // change to primary icon
        [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"set icon error: %@",error);
            }
            NSLog(@"The alternate icon's name is %@",iconName);
        }];
    }else{
        // change to alterante icon
        [[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"set icon error: %@",error);
            }
            NSLog(@"The alternate icon's name is %@",iconName);
        }];
    }
}
4.演示效果


DEMO下載