前言
iOS10.3開放了一個新的API,就是更換APP的Icon圖標。說明:使用下面的方法Xcode必須升級到最新的8.3.1通贞。
函數(shù)方法
- (void)setAlternateIconName:(NSString *)alternateIconName completionHandler:(void (^)(NSError*error))completionHandler;
參數(shù)
alternateIconName
這個是替換圖標的名稱朗若;
在Info.plist文件里面添加一個CFBundleAlternateIcons
字段,如果你想顯示應用的主圖標昌罩,則設置字段的值為nil捡偏,鍵的主鍵是plist里面的CFBundleIcons
字段。
completionHandler
當你執(zhí)行修改圖標的操作后峡迷,系統(tǒng)通過這個block
來告知結(jié)果银伟。
error
在成功時,此參數(shù)的值為零绘搞。如果出現(xiàn)錯誤彤避,該參數(shù)包含指示所發(fā)生的事的alternateiconname
屬性的值保持不變的錯誤對象。
說明 使用此方法將應用程序的圖標更改為其主圖標或其替換圖標之一夯辖。你可以僅在supportsalternateicons
屬性的值是可以改變圖標琉预。
你必須聲明你的應用程序的主要和關(guān)鍵的cfbundleicons
交替使用你的應用程序的Info.plist
文件圖標。
有關(guān)如何配置你的應用程序替代圖標蒿褂,看到關(guān)鍵信息屬性列表的關(guān)鍵參考cfbundleicons
描述圆米。
更多參考官方文檔:https://developer.apple.com/reference/uikit/uiapplication/2806818-setalternateiconname?language=objc
步驟:
需要的代碼
<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>ThirdIcon</key>
<dict>
<key>UIPrerenderedIcon</key>
<true/>
<key>CFBundleIconFiles</key>
<array>
<string>Third</string>
</array>
</dict>
<key>SecondIcon</key>
<dict>
<key>UIPrerenderedIcon</key>
<true/>
<key>CFBundleIconFiles</key>
<array>
<string>Second</string>
</array>
</dict>
<key>FristIcon</key>
<dict>
<key>UIPrerenderedIcon</key>
<true/>
<key>CFBundleIconFiles</key>
<array>
<string>Frist</string>
</array>
</dict>
</dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string></string>
</array>
</dict>
</dict>
- (IBAction)changeFirst:(id)sender {
[self changeIconWithString:@"FristIcon"];
}
- (IBAction)changeSecond:(id)sender {
[self changeIconWithString:@"SecondIcon"];
}
- (IBAction)changeThird:(id)sender {
[self changeIconWithString:@"ThirdIcon"];
}
- (void)changeIconWithString:(NSString *)string
{
//當前設備的系統(tǒng)版本。這里的所有api都是10.3才能使用的
if ([UIApplication sharedApplication].supportsAlternateIcons) {
NSLog(@"可以更換APPicon");
}else{
NSLog(@"不可以更換APPicon");
return;
}
NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
[[UIApplication sharedApplication] setAlternateIconName:string completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"error == %@",error);
}
NSLog(@"iconName == %@",iconName);
}];
}