[英]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
)
}
})
}
您需要通过从UIView
或UIViewController
调用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.