什么是 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
。
我们可以使用动态提供程序来扩展 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
。