前言
iOS 10.3出了挺多的新功能,其中有一個就是可以自定義更改AppIcon。這個功能以前我們只能在蘋果的時鐘上面看出來。但是一直沒有對外開放。現在開放出來,也算是一種突破。
實現
蘋果在iOS 10.3中,多了一個setAlternateIconName:completionHandler:
方法用於更改AppIcon。
1、我們先建立一個工程,然後在Info.plist檔案裡面新建一個CFBundleIcons
,然後在裡面配置可替換的AppIcon。
具體plist配置如下:
<key>CFBundleIcons</key>
<dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>AppIcon</string>
</array>
</dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>icon01</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>icon01</string>
</array>
</dict>
<key>icon02</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>icon02</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
</dict>
複製程式碼
2、將所有要替換的AppIcon加進工程裡面,這裡需要注意的是,不能放在Assets.xcassets
裡面,否則無效。
3、程式碼實現:
//替換icon
- (void)changeIconButtonClick:(NSUInteger)index {
if ([UIApplication sharedApplication].supportsAlternateIcons) {
NSLog(@"你可以更換icon");
[[UIApplication sharedApplication] setAlternateIconName:_iconArr[index] completionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@"成功更換成%@",_iconArr[index]);
}else{
NSLog(@"error:%@",error);
}
}];
} else {
NSLog(@"非常抱歉,你不能更換icon");
return;
}
}
//還原icon
- (void)backToPrimaryIconAction:(id)sender {
if ([UIApplication sharedApplication].alternateIconName != nil) {
//已經被替換掉了圖示
[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@"成功還原圖示");
} else {
NSLog(@"error:%@",error);
}
}];
}
}
複製程式碼
最終效果如下
附上寫好的Demo
再一次感謝您花費時間閱讀這篇文章!
微博: @Danny_呂昌輝
部落格: SuperDanny