什么是 UIImages 的 Dynamic Provider 等价物?

What is the Dynamic Provider equivalent for UIImages?

我们可以使用动态提供程序来扩展 UIColor 类 并让颜色立即变为深色和浅色模式,就像这样

extension UIColor {
  static var myControlBackground: UIColor {
      return UIColor { (traits) -> UIColor in
        // Return one of two colors depending on light or dark mode
        return traits.userInterfaceStyle == .dark ?
          UIColor(red: 0.5, green: 0.4, blue: 0.3, alpha: 1) :
          UIColor(red: 0.3, green: 0.4, blue: 0.5, alpha: 1)
      }
  }
}

但是 UIImages 呢?

我知道你可以用这个方法

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
  if traitCollection.hasDifferentColorAppearance(comparedTo:
                                                 previousTraitCollection) {
    // Color change detected.
    // Adjust the interface accordingly.
  }
}

问题是,如果发生更改时应用程序处于后台,则此方法无法检测到更改。而颜色动态方法确实如此。

任何想法

您正在寻找 UIImageAsset class:

https://developer.apple.com/documentation/uikit/uiimageasset

基本上,您制作一个图像资产以及用于不同特征集合的 UIImage 版本,然后使用图像及其对应的特征集合对图像资产调用 register