iOS開發之 替換AppIcon(iOS10.3)

背景:

在iOS10.3之前如果想替換APP的圖標,必須通過Assets.xcassets添加AppIcon,而且是唯一指定的,不能夠修改。
iOS10.3之后,系統提供了修改AppIcon的API,可以通過內置幾個不同的icon,然后通過代碼設置不同的AppIcon。

核心API:


// Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.
//如果name設置為nil,會自動讀取主app icon
- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));

官方文檔:

1790503-ee6ee4b631758c62.png

info.plist具體配置:

E7A2F9BA-73EE-414A-9CC1-F67832B4882B.png
3F612363-EF6C-4F96-BA38-AA672E3D245D.png

Primary Icon 字段設置為AppIcon(就是asset里面的名字),如果設置appicon的API的name參數設置為nil,會自動讀取Primary Icon對應的圖片,

Test1是用來替換原生圖標的圖片資源,文件名需要和info.plist中保持一致,需要注意的是 圖片資源需要放在外邊,不能放在asset資源里面。

具體實現代碼


- (IBAction)testClick:(id)sender {
    [[UIApplication sharedApplication] setAlternateIconName:@"Test1" completionHandler:^(NSError * _Nullable error) {
        NSLog(@"error = %@",error.localizedDescription);
    }];
}

- (IBAction)test2Click:(id)sender {
    [[UIApplication sharedApplication] setAlternateIconName:@"Test2" completionHandler:^(NSError * _Nullable error) {
        NSLog(@"error = %@",error.localizedDescription);
    }];
}

- (IBAction)emptyClick:(id)sender {
    [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
        NSLog(@"error = %@",error.localizedDescription);
    }];
}

實現效果:

修改前:


Simulator Screen Shot 2017年3月31日 下午5.06.35.png

點擊按鈕修改:

Simulator Screen Shot 2017年3月31日 下午5.06.48.png

修改后:

Simulator Screen Shot 2017年3月31日 下午5.07.03.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容