我正在将UIColor初始化与dynamicProvider一起使用,以在iOS 13中支持暗模式。
public init(dynamicProvider: @escaping (UITraitCollection) -> UIColor)
它的用法如下,并确保每次更改模式时都更新UI:
extension UIColor {
static var customColor: UIColor {
if #available(iOS 13, *) {
return UIColor { (traitCollection: UITraitCollection) -> UIColor in
if traitCollection.userInterfaceStyle == .dark {
return .black
} else {
return .white
}
}
} else {
return .white
}
}
}
我现在希望不仅可以支持.dark / .light,还可以支持自定义值。就像为不同主题定义颜色一样,同时也使用这种非常方便的方式来对变化做出反应。
在此闭包内部是否有访问自定义参数的好方法?
考虑的选项:
在块内部访问UserDefaults以检查当前使用的主题。 -> TraitCollection更改时,将触发许多对UserDefaults的请求。
访问块内部的单例以缓存当前使用的主题。 ->更好的性能,但以引入单例为代价。
从UIColor的静态var更改为自定义颜色提供程序,该提供程序在各处都用于获取正确的颜色。 ->对所有用户界面代码的影响很大。
在这里想念我是否有更简单的方法?