技術の備忘録

【備忘録】UIColorをカラーコードで指定する方法【Swift】

UIColorをカラーコードで指定する方法はもう既に色んな人が記事書かれてるんですが備忘録として記事にしておこうと思います()

UIColorをカラーコードで指定する

UIColorをカラーコードで指定する方法は簡単3手順。

  1. カラーコードをStringで貰う
  2. 「#」を除いた16進数部分を配列にスライス
  3. RGBの各値を配列から振り分け、RGB値として変換する

今回はオレンジ色の原色「#FFA500」をRGBAに変換してみます。

参考:HTMLカラーコード: WEB色見本 原色大辞典

サンプルコード

まずは全体のサンプルコードがこちら。

カラーコードをStringで貰う→配列にスライス

まずUIColorをカラーコードで指定する場合、カラーコードをRGBA値に変換して指定するという方法を取るので、「Red」「Green」「Blue」それぞれの値に振り分けられるように、Stringでもらったカラーコードを「map」で配列に切り出します。

「#」付きで入力される場合も考慮して、replacingOccurencesで#を取り払っておきます。

で、mapでStringを切り出した配列は「StringElement型」の配列になってるので、RGBに振り分けられるようにmapの中ででそれぞれString型にキャストしておきます。

RGBの各値を配列から振り分けてRGB値として変換する

String型の配列ができたら要素をRGBに振り分けてRGB値に変換します。

R(red)はカラーコードの1,2番目の数字、G(green)は3,4番目、B(blue)は5,6番目の数字がそれぞれの色の値を示しているので、それにならってRGB値に変換していきます。

ここの流れを詳しく解説すると、

  1. Rの値を示す配列0,1番目の文字を文字列として連結
  2. 16進数を10進数へ変換するため一旦Int型でキャスト
  3. UIColotが持つRGBAのイニシャライザがCGFloatを指定しているのでCGFloat型としてRの値を算出

という感じです。

ちなみに、print(Int(char[0]+char[1]))の出力がnilになっているのは、radixを指定しない場合キャストする対象を10進数として扱うようになっているため、ここで対象になっている「”ff”」という値はキャスト出来ないものとしてnilを返しているわけですね。

なのでInt(_,radix:16)を使って16進数から10進数の整数に変換→CGFloatにキャストして255で割ればRGB値が出来上がるので、あとはイニシャライザを呼び出して当てはめれば完了です!

というわけで最後にもコードを貼っておきます。