首页 > 解决方案 > 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
            )
        }
    })

}

标签: swiftuiviewuicolor

解决方案


你可以这样做:

var dynamicColor =  UIColor {(traitCollection: UITraitCollection) -> UIColor in
    if traitCollection.userInterfaceStyle == .dark {
        return .white
    } else {
        return .black
    }
}

取自 Ray Wenderlich 的 Screencast 课程(我不隶属于该网站):https ://www.raywenderlich.com/3979883-dark-mode-deep-dive


推荐阅读