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