![](/img/trans.png)
[英]How can I switch programmatically between view controllers that are not on the same storyboard?
[英]Can I programmatically switch between asset catalogs?
在我的應用程序中有一個設置,您可以選擇“貓”或“狗”。 根據此設置,應用程序中的所有圖像都應該不同:圖標、背景等
我不想為所有圖像創建單獨的插座並編寫將替換這些圖像的代碼。 是否有一種機制可以讓我有條件地使用一組或另一組圖像,具體取決於我的內部變量。
最接近我需要的是對深色外觀的 iOS 資產目錄支持——我的應用程序中的所有圖像(包括通過界面構建器設置的沒有插座的圖像)都被神奇地替換,具體取決於應用程序的外觀。 我想要相同的行為,但基於我的內部設置。
在 iOS 或 Xcode 中以編程方式和不以編程方式在資產目錄之間切換不是一個選項(至少不是您描述的方式),因此必須使用一些解決方法。 原因是應用程序包中的所有 xcasset 都已加載,您可以在運行時使用其中任何一個的圖像,而無需指定資產的選項。 可以通過使用iOS Resources Bundle
和 XCAssets 來實現:
Resource Bundles
,按你的意思命名它們,它們將代表你的狀態的數據集合。*.xcassets
並分配圖像`
enum AppState {
case dog
case cat
var bundle: Bundle {
switch self {
case .dog:
return Bundle(identifier: "com.dog")!
case .cat:
return Bundle(identifier: "com.cat")!
}
}
`
就是這樣,瞧。 當然,您可以通過擴展圖像來使您的生活更輕松。 我想你會使用相同的圖像名稱,只有狀態會改變。
extension UIImage {
func getImage(named: String, state: AppState) {
return UIImage(named: named, in: state.bundle!)
}
}
希望這是你所需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.