主にデバッグ用
Version2
@loveeさんに紹介してもらった記事では
cgColor.components
を使っていますが、これだと取れないケースもあるので大人しくgetRed(green:blue:alpha:)
を使うことにしました。
extension UIColor {
var colorCodeAndAlpha: (colorCode: String, alpha: Int) {
var r: CGFloat = 1
var g: CGFloat = 0.5
var b: CGFloat = 0.5
var a: CGFloat = 0.5
getRed(&r, green: &g, blue: &b, alpha: &a)
return (String(format: "#%02X%02X%02X", colorFloat2Int(r), colorFloat2Int(g), colorFloat2Int(b)), alphaFloat2Int(a))
}
private func colorFloat2Int(_ value: CGFloat) -> Int {
var value = value
if value < 0 {
value = 0
}
if value > 1 {
value = 1
}
return Int(value * 255)
}
private func alphaFloat2Int(_ value: CGFloat) -> Int {
var value = value
if value < 0 {
value = 0
}
if value > 1 {
value = 1
}
return Int(value * 100)
}
Version1
ciColor
は生成コストがかかるそうです。
extension UIColor {
var colorCodeAndAlpha: (String, Int) {
let ciColor = CIColor(color: self)
let red = Int(ciColor.red * 255)
let green = Int(ciColor.green * 255)
let blue = Int(ciColor.blue * 255)
let alpha = Int(ciColor.alpha * 100)
return (String(format: "#%02X%02X%02X", red, green, blue), alpha)
}
}
ちなみに
ciColor
を取り出すのにself.ciColor
だと
-CIColor not defined for the UIColor UIDeviceRGBColorSpace ~ need to first convert colorspace.
っていうエラーが出てそのまま死亡する謎
CoreImageから生成されたUIColorでないとself.ciColor
は取り出せないらしい(@loveeさんありがとうございます)。
そんなんプロパティに持たせないかせめてnil
で返してくれって思うけどネ(