iOS 应用内更换AppIcon

作者: Fengur | 来源:发表于2017-04-05 16:23 被阅读668次

1、简介

苹果爸爸在iOS 10.3的API来开放了更换icon的方法,客观来说,实用性并不硬霸。

图片.png
核心API是下面这个方法:
Objc
- (void)setAlternateIconName:(NSString *)alternateIconName 
           completionHandler:(void (^)(NSError *error))completionHandler

Swift 3.0

func setAlternateIconName(_ alternateIconName: String?, 
        completionHandler: ((Error?) -> Void)? = nil)

方法一目了然,设置替换图标名称 & 回调
官方API :传送门
按照官方文档的解释,我们需要在info.plist里来一点操作,具体的key代表了什么,建议大家没事就去 官方文档 cmd+F+keyword搜出来啃一啃。

图片.png

2、使用

开干之前,先来一下英文考察:
Alternate交替的、轮流的
Primary主要的;最早的,原始的

  • 在老地方放上初始化icon 在这里按照API叫 Primary Icon更好

    图片.png
  • 检查Primary Icon 命名,尽量保持规则,后面有用0.0。

图片.png 图片.png
  • 导入Alternate Icon,命名尽量规则。Mark:资源直接放到Bundle,目前放到Assets并不能愉快的玩耍
图片.png
  • Info.plist中添加响应key-value,Pay attention here,budy
  • Open as source code
<plist version="1.0">
<dict>
  <key>CFBundleIcons</key>
  <dict>
      <key>CFBundleAlternateIcons</key>
      <dict>
          <key>UIPrerenderedIcon</key>
          <false/>
          <key>icontwo</key>
          <dict>
              <key>CFBundleIconFiles</key>
              <array>
                  <string>icontwo</string>
              </array>
          </dict>
      </dict>
      <key>CFBundlePrimaryIcon</key>
      <dict>
          <key>CFBundleIconFiles</key>
          <array>
              <string>Icon60x60</string>
          </array>
      </dict>
  </dict>

  • Focus on picture
图片.png
  • 调用最上头简介里的API,查看效果

Objc

- (void)changeIcon{
    if ([UIApplication sharedApplication].supportsAlternateIcons) {
        NSLog(@"this app can change app icon");
    }else{
        NSLog(@"sorry,this app can not change app icon");
        return;
    }
    NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
    if (iconName) {
        [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"set icon error: %@",error);
            }
            NSLog(@"current icon's name -> %@",iconName);
        }];
    }else{
        [[UIApplication sharedApplication] setAlternateIconName:@"icontwo" completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"set icon error: %@",error);
            }
            NSLog(@"current icon's name -> %@",iconName);
        }];
    }
}

Swift3.0

    func changeIcon() {
        if UIApplication.shared.supportsAlternateIcons {
            print("this app can change app icon")
        }
        else {
            print("sorry,this app can not change app icon")
            return
        }
        let iconName: String = UIApplication.shared.alternateIconName!
        if iconName != "" {
            UIApplication.shared.setAlternateIconName(nil, completionHandler: {(_ error: Error?) -> Void in
                if error != nil {
                    print("set icon error: \(String(describing: error))")
                }
                print("current icon's name -> \(iconName)")
            })
        }
        else {
            UIApplication.shared.setAlternateIconName("icontwo", completionHandler: {(_ error: Error?) -> Void in
                if error != nil {
                    print("set icon error: \(String(describing: error))")
                }
                print("current icon's name -> \(iconName)")
            })
        }
    }
  • Game over
new .gif

终于找到了一个正常的GIF制作工具,Demo传送门,感谢翻阅。

相关文章

网友评论

  • 热血足球2016:请问替换后的icon只能是一种,如60@2x,60@3x,如何同时适配ipad和iPhone 呢,还有能否从远动态更换icon,求大大指点
  • 力量恠心中:这个有些应用很常用
  • Sunsgne丶D:mark
    Sunsgne丶D:@Fengur 哈哈。偶尔也看看骚猪直播
    Fengur:@即将拥有人鱼线的dzk 差点看成了pdd
  • Res2013:很不错,刚出来没多久就写了篇文章,谢谢作者,希望能持续分享!:smile:
    Fengur:谢谢老铁 老铁你真帅

本文标题:iOS 应用内更换AppIcon

本文链接:https://www.haomeiwen.com/subject/tlxxattx.html