4 UIViewを子供にする場合に気をつけること
では、前回と同じように、範囲外に指が移動したらタッチ前の色に戻したい場合はどうでしょうか?
この場合、Pallet側はViewController側選択色インジケータの背景色を知る術がないので、前回同様、ViewController側で.TouchCancelイベント等と連携することになるわけですが、今回のPalletクラスは最初に言った「ある理由」のために、UIControl側のタッチイベント対応メソッドが呼び出されないようになっていて、.TouchCancelイベント等でのターゲット/アクションテデザインパターンが機能しません。
4.1 UIControl側タッチイベント対応メソッドが呼び出されない理由
その理由は、Palletが子供として持つ、色パッチ用UIViewのuserInteractionEnabledプロパティがtrueになっているからです。
UIControl側のタッチイベント対応メソッドは、指が触れた時に-hitTest:withEvent:が自分自身を戻した場合だけ呼び出されるようになっていて、今回のように子側UIViewが戻ってくる状態だと機能しません。
結果的に、UIControl側のタッチイベント対応メソッド内で実行される.TouchCancel等のイベント発生時のアクションメソッド呼び出しも起こらないことになります。今回、.ValueChangedだけが、ちゃんと連携されているのは、私たち自身が直接、-sendActionsForControlEvents:を使って
この記事は会員限定です。会員登録をすると続きをお読みいただけます。
ログイン / 新規登録