UIColor dynamicProvider黑暗模式,带有自定义主题/参数

时间:2019-09-30 14:49:48

标签: ios swift ios13 ios-darkmode

我正在将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,还可以支持自定义值。就像为不同主题定义颜色一样,同时也使用这种非常方便的方式来对变化做出反应。

在此闭包内部是否有访问自定义参数的好方法?

考虑的选项:

  1. 在块内部访问UserDefaults以检查当前使用的主题。 -> TraitCollection更改时,将触发许多对UserDefaults的请求。

  2. 访问块内部的单例以缓存当前使用的主题。 ->更好的性能,但以引入单例为代价。

  3. 从UIColor的静态var更改为自定义颜色提供程序,该提供程序在各处都用于获取正确的颜色。 ->对所有用户界面代码的影响很大。

在这里想念我是否有更简单的方法?

0 个答案:

没有答案