UIColor可以用深色和浅色两种颜色初始化吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIColor可以用深色和浅色两种颜色初始化吗?相关的知识,希望对你有一定的参考价值。

我在训练应用中使用随机的蜡笔颜色(弹跳的圆圈),但是当我的iPad处于黑暗模式时,这些蜡笔看起来非常淡淡。我可以用两种颜色初始化UIColor吗?也许像这样:

UIColor(forLightMode: UIColor, forDarkMode: UIColor)

我当前的应用正在正确创建新颜色,但是当我从暗模式更改为亮模式时,它们不会自动更改。该应用程序刚刚开始从pastel集生成新的。

func makeRandomColor() -> UIColor 

    let fullRange : ClosedRange<CGFloat> = 0...255
    let pastelRange : ClosedRange<CGFloat> = 127...255

    let randomPastelRed     = CGFloat.random(in: pastelRange) / 255
    let randomPastelGreen   = CGFloat.random(in: pastelRange) / 255
    let randomPastelBlue    = CGFloat.random(in: pastelRange) / 255

    let randomRed           = CGFloat.random(in: fullRange) / 255
    let randomGreen         = CGFloat.random(in: fullRange) / 255
    let randomBlue          = CGFloat.random(in: fullRange) / 255

    let randomAlpha         = CGFloat.random(in: 0.6...1)

    return UIColor.init(dynamicProvider:  traitCollection in
        if traitCollection.userInterfaceStyle == .dark 
            return UIColor(
                red: randomRed,
                green: randomGreen,
                blue: randomBlue,
                alpha: randomAlpha
            )
         else 
            return UIColor(
                red: randomPastelRed,
                green: randomPastelGreen,
                blue: randomPastelBlue,
                alpha: randomAlpha
            )
        
    )


答案

您需要通过从traitCollectionDidChangesetNeedsLayout()调用UIView或类似方法来收听UIViewController通知并重绘UI。有关更多信息,请检查Implementing Dark Mode on iOS〜22min

以上是关于UIColor可以用深色和浅色两种颜色初始化吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改状态栏颜色

如何使用TextCleaner处理带有深色背景的浅色文本

iOS CGColor 与 UIColor

iOS CGColor 与 UIColor

如何在 VSCode 用户设置中为深色和浅色主题指定颜色

根据背景图像/颜色更改文本颜色