iOS 10.3 開放了更換 app 圖標的 API,核心方法是下面這個:
func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? = nil)
但 info.plist 如何填寫這部分讀起來還是有些晦澀,一時可能搞不清楚如何操作,下面做個示范。
<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>blackBgColor</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>blackBgColor</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>AppIcon60x60</string>
</array>
</dict>
</dict>
如圖,Primary Icon 字段寫為 AppIcon60x60 是因為這里 xcassets 里面我只導入了 60pt@2x 和 60pt@3x 的圖片資源,這里選為 60 是因為對于 iPhone,60pt 的圖片資源圖標所需高質量,更低分辨率的版本系統會自動壓縮以展示。
blackBgColor 是我的用于替換原生圖標的圖片資源。文件名需要和 info.plist 中保持一致(注意 info.plist 中用到了兩次 "blackBgColor"),同時這也是你在代碼中設置圖標時,需要給 API 傳入的參數。同樣是 60pt@2x 和 60pt@3x 的圖片資源,文件不通過 Assets.xcassets 添加進來,而是直接放到目錄中。
如果你需要支持 iPad,建議這里使用 83.5pt(iPad Pro)的圖片資源。另外還有些其他關于在 iPad 上替換圖標的注意事項,注意我們這里在 info.plist 里面所用的 key 是CFBundleIcons,還有另外一個 key 是 CFBundleIcons~ipad。
替換圖標部分的代碼就超級簡單了:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func changeAppIcon(_ sender: Any) {
if UIApplication.shared.supportsAlternateIcons {
print("you can change this app's icon")
}else {
print("you cannot change this app's icon")
return
}
if let name = UIApplication.shared.alternateIconName {
// CHANGE TO PRIMARY ICON
UIApplication.shared.setAlternateIconName(nil) { (err:Error?) in
print("set icon error:\(String(describing: err))")
}
print("the alternate icon's name is \(name)")
}else {
// CHANGE TO ALTERNATE ICON
UIApplication.shared.setAlternateIconName("blackBgColor") { (err:Error?) in
print("set icon error:\(String(describing: err))")
}
}
}
}
這是上述所有內容的完整 demo 地址
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。