有沒有一種方法可以在用戶單擊按鈕時更改應用程式圖示?提前致謝。我正在使用:
界面生成器:故事板語言:Swift macOS:12 Xcode 版本:13.1
uj5u.com熱心網友回復:
步驟1:
設計您的替代應用程式圖示并將它們匯出為兩種尺寸: 120px (60px @2x) 180px (60px @3x) 將圖示添加到新目錄 App Icons 下的專案中。請注意,備用圖示檔案必須位于 Project 目錄中,而不是 Assets 目錄中。
第 2 步:在 Info.plist 檔案中注冊您的新圖示
首先,添加一個新的 CFBundleIcons 條目(圖示檔案 (iOS 5)),然后添加另一個條目 CFBundleAlternateIcons。
Info.plist 中的 CFBundleAlternateIcons 條目 對于每個備用圖示,在 infos.plist 檔案中的 CFBundleAlternateIcons 下添加一個新條目。條目的名稱是稍后將在您的 Xcode 專案中使用的圖示的名稱,條目的字串值是您在步驟 1 中添加到專案中的圖示檔案的名稱。
Info.plist 中的應用程式圖示條目 一旦您在 Info.plist 中添加了所有圖示,您的備用圖示就可以在您的應用程式中使用了。

第 3 步:應用程式圖示管理器
用于切換應用程式圖示的 Apple API 非常簡單,包含 3 個
變數/函式:
var supportsAlternateIcons: Bool { get }
open func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? = nil)
open var alternateIconName: String? { get }
根據 Apple 檔案,當系統允許您更改應用程式的圖示時,supportsAlternateIcons 將為 true,否則為 false。setAlternateIconName 方法用于將應用程式圖示更改為其主圖示或備用圖示之一。如果alternateIconName 為nil,則將使用默認的應用程式圖示。最后,alternateIconName 回傳當前使用的備用圖示的名稱,如果使用默認圖示,則回傳 nil。為了輕松處理圖示更改,我們將創建一個圖示管理器來與 Apple API 進行互動。首先,創建一個包含每個備用應用程式圖示的列舉。
enum BMAppIcon: CaseIterable {
case classic,
cookie,
donut,
cake,
iceCream
}
現在讓我們在列舉中添加每個圖示的檔案名,以及將在我們的 App UI 中顯示的預覽圖示。在我們的列舉中,經典是默認的應用程式圖示。這就是為什么它的檔案名將為 nil。有關為什么檔案名為零的更多資訊,您可以查看 Apple 檔案中的 alterIconName 描述。
var name: String? {
switch self {
case .classic:
return nil
case .cookie:
return "cookieIcon"
case .donut:
return "donutIcon"
case .cake:
return "cakeIcon"
case .iceCream:
return "iceCreamIcon"
}
}
var preview: UIImage {
switch self {
case .classic:
return #imageLiteral(resourceName: "[email protected]")
case .cookie:
return #imageLiteral(resourceName: "[email protected]")
case.donut:
return #imageLiteral(resourceName: "[email protected]")
case .cake:
return #imageLiteral(resourceName: "[email protected]")
case .iceCream:
return #imageLiteral(resourceName: "[email protected]")
}
}
現在我們有了列舉,讓我們創建一個 AppIconManger 類,它有兩個功能:一個是檢索當前的應用程式圖示,另一個是更新它。
var current: BMAppIcon {
return BMAppIcon.allCases.first(where: {
$0.name == UIApplication.shared.alternateIconName
}) ?? .classic
}
func setIcon(_ appIcon: BMAppIcon, completion: ((Bool) -> Void)? = nil) {
guard current != appIcon,
UIApplication.shared.supportsAlternateIcons
else { return }
UIApplication.shared.setAlternateIconName(appIcon.name) { error in
if let error = error {
print("Error setting alternate icon \(appIcon.name ?? ""): \(error.localizedDescription)")
}
completion?(error != nil)
}
}
第 4 步:在您的應用程式中使用您的應用程式圖示管理器
最后一步,要更新當前的應用程式圖示,只需呼叫您之前定義的 setIcon 函式并將您要設定的新圖示作為引數傳遞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/381217.html
上一篇:如何僅勾勒元素的可見部分?
