色が暗い色かどうかを判定する
extension UIColor {
func calculateBrightnessDifference() -> CGFloat {
var red: CGFloat = 0.0, green: CGFloat = 0.0, blue: CGFloat = 0.0
self.getRed(&red, green: &green, blue: &blue, alpha: nil)
// 計算式参考 https://www.w3.org/TR/AERT/#color-contrast
return ((red * 255 * 299) + (green * 255 * 587) + (blue * 255 * 114)) / 1000
}
func isDrakColor() -> Bool {
// 参考 https://www.w3.org/TR/AERT/#color
let referenceValue: CGFloat = 125.0
if self.calculateBrightnessDifference() < referenceValue {
return true
} else {
return false
}
}
}
上記の
isDrakColor() を使えば暗い色かどうかが判定できるので、
背景が暗い色の場合はLabelの文字色を明るい色・明るい色の場合はLabelの文字色を暗い色といったように変更できます。
例
if backgroundColor.isDrakColor() {
self.label.textColor = UIColor.white
} else {
self.label.textColor = UIColor.black
}
背景色が固定でない場合等は、これで判定し見やすい文字色で描画できそうです。
村田真矢
2018年入社の新卒です。
EMやっています。