簡體   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