LoginSignup
1
1

More than 1 year has passed since last update.

【Swift】UIColorからRGBAの値を取得する

Posted at

はじめに

今回は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で拡張しているだけなので、さほど問題ではないかなと思います。

おわりに

原因を知っている方いましたらコメントください、、、
また、他の方法もご存知の方いましたらコメントください!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1