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
<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.演示效果