iOS更改AppIcon

SuperDanny發表於2017-12-13

前言

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

相關文章