繁体   English   中英

UIColor 可以用深色和浅色模式颜色初始化吗?

[英]Can UIColor be initialised with both dark and light mode color?

我在我的训练应用程序中使用随机柔和的颜色(弹跳圆圈),但是当我的 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
            )
        }
    })

}

您需要通过从UIViewUIViewController调用setNeedsLayout()或类似方法来收听traitCollectionDidChange通知并重绘您的 UI。 有关更多信息,请查看在 iOS 上实施暗模式~22 分钟

你可以这样做:

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

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

暂无
暂无

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

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