iOS更改AppIcon

字数 238阅读 709

前言

iOS 10.3出了挺多的新功能,其中有一个就是可以自定义更改AppIcon。这个功能以前我们只能在苹果的时钟上面看出来。但是一直没有对外开放。现在开放出来,也算是一种突破。

实现

苹果在iOS 10.3中,多了一个setAlternateIconName:completionHandler:方法用于更改AppIcon。

1、我们先创建一个工程,然后在Info.plist文件里面新建一个CFBundleIcons,然后在里面配置可替换的AppIcon。

打开plist文件

配置plist

具体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里面,否则无效。

icons

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

推荐阅读更多精彩内容