Swift で使用できるいくつかの標準の値の代わりに、16 進数のカラー値を使用しようとしていますUIColor
が、その方法がわかりません。
例:#ffffff
色としてどのように使用すればよいですか?
ベストアンサー1
#ffffff
実際には、16進数表記では赤ff
、緑ff
、青の3つの色成分ですff
。Swiftでは、接頭辞を使用して16進数表記を書くことができます0x
。例:0xFF
変換を簡素化するために、整数値 (0 - 255) を取る初期化子を作成しましょう。
extension UIColor {
convenience init(red: Int, green: Int, blue: Int) {
assert(red >= 0 && red <= 255, "Invalid red component")
assert(green >= 0 && green <= 255, "Invalid green component")
assert(blue >= 0 && blue <= 255, "Invalid blue component")
self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
}
convenience init(rgb: Int) {
self.init(
red: (rgb >> 16) & 0xFF,
green: (rgb >> 8) & 0xFF,
blue: rgb & 0xFF
)
}
}
使用法:
let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF)
let color2 = UIColor(rgb: 0xFFFFFF)
アルファを取得するにはどうすればいいですか?
ユースケースに応じて、ネイティブUIColor.withAlphaComponent
メソッドを使用することもできます。例:
let semitransparentBlack = UIColor(rgb: 0x000000).withAlphaComponent(0.5)
または、上記のメソッドに追加の(オプションの)パラメータを追加することもできます。
convenience init(red: Int, green: Int, blue: Int, a: CGFloat = 1.0) {
self.init(
red: CGFloat(red) / 255.0,
green: CGFloat(green) / 255.0,
blue: CGFloat(blue) / 255.0,
alpha: a
)
}
convenience init(rgb: Int, a: CGFloat = 1.0) {
self.init(
red: (rgb >> 16) & 0xFF,
green: (rgb >> 8) & 0xFF,
blue: rgb & 0xFF,
a: a
)
}
alpha
(既存の初期化子と名前が衝突するため、パラメータに名前を付けることはできません)。
呼び名:
let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF, a: 0.5)
let color2 = UIColor(rgb: 0xFFFFFF, a: 0.5)
アルファを0~255の整数として取得するには、
convenience init(red: Int, green: Int, blue: Int, a: Int = 0xFF) {
self.init(
red: CGFloat(red) / 255.0,
green: CGFloat(green) / 255.0,
blue: CGFloat(blue) / 255.0,
alpha: CGFloat(a) / 255.0
)
}
// let's suppose alpha is the first component (ARGB)
convenience init(argb: Int) {
self.init(
red: (argb >> 16) & 0xFF,
green: (argb >> 8) & 0xFF,
blue: argb & 0xFF,
a: (argb >> 24) & 0xFF
)
}
呼ばれる
let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF, a: 0xFF)
let color2 = UIColor(argb: 0xFFFFFFFF)
または、前の方法の組み合わせ。文字列を使用する必要はまったくありません。