我在训练应用程序中使用了随机的粉彩(跳动的圆圈(,但当我的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
)
}
})
}
您可以这样做:
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
您需要监听traitCollectionDidChange
通知,并通过从UIView
或UIViewController
调用setNeedsLayout()
或类似方法来重新绘制UI。有关更多信息,请查看在iOS上实现暗模式~22min