1. ホーム
  2. ios

[解決済み] 16進カラーバリューの使用方法

2022-03-22 03:19:31

質問

私は、Swiftで16進数の色値を使おうとしています。 UIColor を使用することができますが、その方法が全く分かりません。

例:どのように #ffffff を色として使用できますか?

解決方法は?

#ffffff は、16進数表記で実際には3つの色成分である赤色 ffff および青 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)

または、これまでの方法の組み合わせ。文字列を使用する必要は全くありません。