繁体   English   中英

切换暗/亮模式时如何动态提供CGColor?

[英]How to provide CGColor dynamically when switching dark/light mode?

我已经在我的 Swift 应用程序中为 OS13 设置了一个动态UIColor来处理暗模式。

例如:

static var background: UIColor {
    if #available(iOS 13, *) {
        return UIColor { (traitCollection: UITraitCollection) -> UIColor in
            if traitCollection.userInterfaceStyle == .dark {
                return UIColor(hex: "2b2d42")
            } else {
                return UIColor(hex: "FFFFFF")
            }
        }
    } else {
        return UIColor(hex: "FFFFFF")
    }
}

在代码中使用CGColor而不是UIColor任何地方,我计划像这样调用特定UIView traitCollectionDidChange ,例如:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    layer.fillColor = color.cgColor
}

它有效,但我注意到,如果我使用底部滑动手势切换回我的应用程序,更改设置中的模式后,我可以看到所有UIColor已经在传入屏幕上更新,但CGColor只更新当应用程序真正进入前台并traitCollectionDidChange

在此处输入图片说明

有没有更好的方法来解决这个问题,以便CGColor也立即更新?

转到 Xcode > Assets.xcassets > new Color Set > 设置明暗外观的颜色

现在在视图背景颜色中设置此颜色

self.view.backgroundColor = UIColor.init(named: "ColorForCameraScreen")

在此处输入图片说明

不幸的是,是的,这是您唯一的选择。

CGColor是一个CoreGraphics原语,一个简单的静态 C 结构,它不会从新的UIColor动态功能中受益。

但是,在最新版本的 iOS(我正在 15.0 上进行测试)中,您的CGColors应该在 App Switcher 中正确更新。

您可以在jessesquires 的这篇文章其他答案中找到更多详细信息。

我希望这个(迟到的)答案有助于对此有所了解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM