我在Swift制作了一个颜色选择器应用程序,我需要文本来适应背景颜色。在Swift中确定背景颜色的文本颜色?
我在默认情况下是黑色的UIView上有文字,如果有较深的背景颜色,我希望它变浅,如果有较浅的背景颜色使文字更暗,以使文字更具可读性。
下面是一些截图:
如果可能的话我会很感激你的回复。
我在Swift制作了一个颜色选择器应用程序,我需要文本来适应背景颜色。在Swift中确定背景颜色的文本颜色?
我在默认情况下是黑色的UIView上有文字,如果有较深的背景颜色,我希望它变浅,如果有较浅的背景颜色使文字更暗,以使文字更具可读性。
下面是一些截图:
如果可能的话我会很感激你的回复。
你可以这样做:
extension UIColor
{
var isDarkColor: Bool {
var r, g, b, a: CGFloat
(r, g, b, a) = (0, 0, 0, 0)
self.getRed(&r, green: &g, blue: &b, alpha: &a)
let lum = 0.2126 * r + 0.7152 * g + 0.0722 * b
return lum < 0.50 ? true : false
}
}
这将计算颜色的亮度,并确定它是否超过某一阈值。然后说myLabel.textColor = view.backgroundColor?.isDarkColor == true ? .white : .black
可以实现黑色和白色取决于任何颜色的亮度。
在这里,一些可以理解的解决方案。
扩展:
extension UIColor{
var brightnessAdjustedColor:UIColor{
var components = self.cgColor.components
let alpha = components?.last
components?.removeLast()
let color = CGFloat(1-(components?.max())! >= 0.5 ? 1.0 : 0.0)
return UIColor(red: color, green: color, blue: color, alpha: alpha!)
}
}
在上述extension
亮度通过对RGB颜色分量中的最高值确定。 color
会给逐步调整,而不必0.5 ? 1.0 : 0.0
这condition.i.e,let color = CGFloat(1-(components?.max())!
在ViewController
:
@IBOutlet var labelBrightness: UILabel!
var red:CGFloat = 0.0
var blue:CGFloat = 0.0
var green:CGFloat = 0.0
@IBAction func actionSlider(_ sender: UISlider) {
if sender.tag == 1{
red = CGFloat(sender.value/255)
}else if sender.tag == 2{
green = CGFloat(sender.value/255)
}else{
blue = CGFloat(sender.value/255)
}
let backgroundColor = UIColor(red: self.red, green: self.green, blue: self.blue, alpha: 1.0)
self.view.backgroundColor = backgroundColor
self.labelBrightness.textColor = backgroundColor.brightnessAdjustedColor
}
输出:
这工作得很好! –