はじめに
今回はUIColorからRGBAの値を取得する方法を紹介します。
パターン1
cgColorでUIColorでCGColorのプロパティを扱えるようにし、componentsで取得する方法です。
extension UIColor {
var redValue: CGFloat {
return self.cgColor.components![0]
}
var greenValue: CGFloat {
return self.cgColor.components![1]
}
var blueValue: CGFloat {
return self.cgColor.components![2]
}
var alphaValue: CGFloat {
return self.cgColor.components![3]
}
}
myView.backgroundColor = UIColor(red: 0.8, green: 0, blue: 0, alpha: 1)
print(myView.backgroundColor!.redValue) // 0.8
しかし、個人開発で使っていると、突然blueValueでout of rangeエラーが出て原因がわからなかったため、他の方法を探さないといけなくなりました。(原因に心当たりがある方は教えていただけると嬉しいです。。。)
パターン2
パターン1が使えなくなったので、こちらの方法で現在は対応しています。getRedを使う方法です。
extension UIColor {
var redValue: CGFloat {
return getRed().red
}
var greenValue: CGFloat {
return getRed().green
}
var blueValue: CGFloat {
return getRed().blue
}
var alphaValue: CGFloat {
return getRed().alpha
}
private func getRed() -> (red: CGFloat,
green: CGFloat,
blue: CGFloat,
alpha: CGFloat) {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
return (red: red, green: green, blue: blue, alpha: alpha)
}
}
使い方は先ほどと同じです。若干コード量は増えてしまいますが、extensionで拡張しているだけなので、さほど問題ではないかなと思います。
おわりに
原因を知っている方いましたらコメントください、、、
また、他の方法もご存知の方いましたらコメントください!