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
)
}
})
}

您可以这样做:

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通知,并通过从UIViewUIViewController调用setNeedsLayout()或类似方法来重新绘制UI。有关更多信息,请查看在iOS上实现暗模式~22min

最新更新