簡體   English   中英

我可以以編程方式在資產目錄之間切換嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM