Responder ChainとFirst Responder


イベントを受信および処理するUI Responder


私たちがアプリケーションを作成するとき、よく接するUIVEをよく見ると、UIresponderというオブジェクトを継承していることがわかります.
UIresponderの友人は名前から分かるように,アクティビティを受け取ったら処理しなければならず,自分で処理できない場合は他のUIresponder処理に渡す.

上図に示すように、ユーザインタフェース応答プログラムを継承するオブジェクトは、ユーザインタフェースビューの他に、ユーザインタフェースコントローラ、ユーザインタフェースアプリケーションなどがあるので、複数のイベントを受信して処理する機能を実現することができる.
同様に、Responderがイベントを受信して処理する前に、最初にイベントを受信するオブジェクトしか存在しない.First Responderとは、イベントを直接受信する最初のResponderオブジェクトを指す.
では、Responder Chainとは何でしょうか.アクティビティを最初に受信したオブジェクトが処理するオブジェクトでない場合、Responderは何をしますか?前述したように、イベントは次のResponderオブジェクトに渡され、Responder Chainと呼ばれる適切なオブジェクトが受信されるまで繰り返される.

First Responderの決定

  • タッチイベント:タッチビュー
  • 記者会見:フォーカスビュー
  • ウォブルイベント:ユーザまたはUIKETによって指定されたビュー
  • リモートイベント:ユーザまたはUIKITが指定するビュー
  • 編集メニューイベント:ユーザまたはUIKET指定ビュー
  • 가속도 센서, 자이로 센서, 자기장 센서 등에서 발생하는
    이벤트의 경우에는 Responder Chain을 따르지 않고
    지정된 객체로 바로 전달되며, 이를 처리하기 위해서는
    Core Motion Framework를 사용해야 하니 주의!!

    hitTestによるイベントの確認


    UImitベースの場合、ビューはヒットテストを行い、イベントが発生した場所を決定します.UIViewのhitTest(with)関数は、ビュー階層を参照すると、関連するイベントを持つ最も深いビューを検索して返します.
    (見つかったビューはイベントのFrest Responderになります)

    Responder Chainの変更


    next propertyを上書きすることで、次のResponderオブジェクトを変更し、Responder Chainを変更できます.
    他にも様々な水晶元素があるので、これらの部分はよく理解してください.