前言
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