swift - 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
推荐阅读
- c - recv()/poll() 上的 zmq_send() 块
- .htaccess - 拒绝除 .htaccess 之外的所有人
- arrays - 如何阅读 Swift 日志以追踪错误?
- spring - 使用@OneToMany 或@ManyToMany 定位未映射的类:com.example.soasec.entities.User.roles[com.example.soasec.entities.Role]
- sql - 是否可以进行有条件的连接?
- scala - 使用不同的键丰富一个 RDD 与另一个 RDD
- apache-spark - Apache Spark 3 是否支持 Spark RDD 的 GPU 使用?
- flutter - 开关小部件总是返回到关闭位置
- android - 尝试在空对象引用上调用虚拟方法“void androidx.databinding.ViewDataBinding.invalidateAll()”
- python - 根据输出值添加变色标签背景