親切すぎるiPhoneアプリ開発の本

スライダのように連続して値を変えるには? - UIViewを子供にする場合に気をつけること

Icon comment count 0
Icon stock count 0

4 UIViewを子供にする場合に気をつけること

では、前回と同じように、範囲外に指が移動したらタッチ前の色に戻したい場合はどうでしょうか?

この場合、Pallet側はViewController側選択色インジケータの背景色を知る術がないので、前回同様、ViewController側で.TouchCancelイベント等と連携することになるわけですが、今回のPalletクラスは最初に言った「ある理由」のために、UIControl側のタッチイベント対応メソッドが呼び出されないようになっていて、.TouchCancelイベント等でのターゲット/アクションテデザインパターンが機能しません。

4.1 UIControl側タッチイベント対応メソッドが呼び出されない理由

その理由は、Palletが子供として持つ、色パッチ用UIViewのuserInteractionEnabledプロパティがtrueになっているからです。

UIControl側のタッチイベント対応メソッドは、指が触れた時に-hitTest:withEvent:が自分自身を戻した場合だけ呼び出されるようになっていて、今回のように子側UIViewが戻ってくる状態だと機能しません。

↓ -hitTest:withEvent:で子側UIViewが戻ってくる

結果的に、UIControl側のタッチイベント対応メソッド内で実行される.TouchCancel等のイベント発生時のアクションメソッド呼び出しも起こらないことになります。今回、.ValueChangedだけが、ちゃんと連携されているのは、私たち自身が直接、-sendActionsForControlEvents:を使って

出典情報

Medium

親切すぎるiPhoneアプリ開発の本

  • 著者: 國居 貴浩

コメント

    コメントはありません