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