我在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
}
輸出:
這工作得很好! –