いや〜今日もハマりました〜
でも投げずにやり遂げました。
前回のモーションセンサーのグラフ表示でCGBlendModeを使ったのですが、
望みの効果を選ぶのがなかなか難しかったので、
今日はそのサンプルとなるようなものを作ろうとしたのです![]()
まず最初にUIImageのサブクラスを作ろうとしてつまずきました。
UIImageはサブクラス化することは想定されていないそうで、
イニシャライザに委譲する事ができず(許されておらず)断念しました![]()
次にUIImageViewのサブクラスを作って、
三原色のヴェンダイアグラムを表示するようにしました。
しかし、そもそもここまでのアプローチは当を得ないものでした![]()
サブクラス化しなくても、単にUIImageを返すメソッドで良かったのです![]()
しかし、サブクラス化の練習をしたのだと思って気持ちを切り替えます。
次はUIViewのサブクラスを作って、親ビューの上で重ね合わせようとしました。
ここでかなり悩んでしまったのですが、最大の間違いは、
各ビューの drawRect の中でCGBlendModeを適用させようとしたことです![]()
それは、各ビューの背景との合成にすぎません。
他のビューとの重なりは無関係です。
CGBlendModeはコンテキストに対して指定するものなので、
そのコンテキストの中で有効です。
”親ビューにoverlayする子ビュー”みたいなものが作れるわけではないんですね![]()
それなら同じdrawRectの中で合成してやろうということで、
今度は、2枚のUIImageを保持するUIViewのサブクラスを作りました。
(いわばdrawRectを持つUIImageViewみたいなものでしょうか…)
そこにタップイベントを処理する関数をオーバーライドして、
やっと出来上がったのがこれです。
およそオブジェクト指向とは呼べないようなプロセスとなりましたが、
それなりに満足感があります![]()
疲れました…。
Xcodeのコードエディタが、内部エラーの発生とやらでご機嫌ななめです。
今日は電源を落として寝ます![]()