2021年11月12日金曜日

UIColor の Hex String と Color Space

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) に変換してから作成するのが良さそう。



UIColor をアプリに保存する

UserDefaultなどに保存する場合、Hex Stringにする、NSKeyedArchiverでDataにするとがが考えられる。
Display P3の色をNSKeyedArchiverでアーカイブして復元すると、Extended sRGB の構成の色になるみたいだ。
なので、選択した色をできるだけ同じ構成で復元したい場合は、Color Space名、componentsの値の両方を保存するのが良さげかも。


おまけ

Hex StringからUIColor(sRGB)を作成するコード

• • •

2021年11月3日水曜日

Ratio 電卓 アプリを作りました!



個人的に作っていたアプリがいくつかあるのだが、その一つ、シンプルな電卓アプリをリリースしてみた。

きっかけは、「おからを、おからパウダーで代用する時の計算を簡単にしたい」 

おからパウダー 1g に対して、水を3.5gを加えると、おからができる。
そのとき、おから ○○g を作るには、それぞれ何g必要なのか? 

というのが、いつも暗算できない。

最近のマイブームが糖質オフのお菓子作りなのもあり、この計算をすることが度々ある。おからパウダーは100均で入手できるのでお財布にも優しく、保存もきく、食物繊維も多い、という有難い食材。

このようなパターンを汎用的にしてみたものに加え、比例式の計算もできるようにした。
こういう理解しやすいレイアウトで数値を並べないと、頭が働かない私...。


Text Calculator

そして、iPadの時は、KeyboardよりもApple Pencilで数字を書いた方が早いんじゃ?と思い、追加したのが Text Calculator。


Pencilで書き込みやすいように、レイアウトしている。また、+, - などの計算記号は、うまく認識できないことが多いのでボタンで配置している。

計算は、NSExpression を利用しているので、( ) を使ったものなど、ある程度の計算式は認識可能。


限られたシチュエーションであれば、便利と思うので、よければお使いください。
無料でーす!広告なしでーす!



• • •