UIColorを、#000000 のような 16進数(Hex String)に変換する方法。ググるといくつか出てくると思う。以下のようなやつ。
toHexString1() は、cgColorのcomponentを使う方法。
toHexString2() は、getRed で取得する方法。
toHexString3() は、CIColor 経由で取得する方法。
コレらをそのまま使うと、変換に失敗する場合もある。
注目すべきは、UIColor が どの Color Spaceが使われているか?
Display P3などは、sRGBよりも大きな範囲が対象になるので、、Extended sRGBに変換すると0.0 から 1.0 に収まらない値、つまり、マイナスや、1.0 より大きい数字になる場合がある。
Display P3 で r, g, b = 1.0, 0.0, 0.0 は、Extended sRGB で、r, g, b = 1.093, -0.227, 0.15 になる。
(使用しているiOSのバージョンによって差異あるかも)
「1. CGColorSpace.displayP3 で作成」と、「2. displayP3Red で作成」は、ともにDisplay P3 の値を指定して作成する方法だが、上記のように構成は変わるみたい。
「2. displayP3Red で作成」の時のように、UIColorをprintで表示した情報と、cgColorの情報は一致しない場合もある。
UIColorPickerViewControllerで取得できる色は、「1. CGColorSpace.displayP3 で作成」の方の構成。
UIColorPickerViewControllerで、Color Spaceを指定できれば良いのになぁ。
また、GrayScaleの場合、componentsの数は2つになることも注意。
安全に Hex Stringを作成するためには、sRGB (or Display P3) に変換してから作成するのが良さそう。