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 を利用しているので、( ) を使ったものなど、ある程度の計算式は認識可能。


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