Responder ChainとFirst Responder


Responder


•イベントを制御し、イベントに応答
•イベントが発生した場合、UIKETはこれらのデータをアプリケーションの応答オブジェクトに送信してイベント処理を行う
•すべての応答オブジェクトがUI応答器から継承されたクラスのインスタンスです.
•たとえば、ユーザーインタフェースアプリケーション、ユーザーインタフェースコントローラ、およびユーザーインタフェースウィンドウオブジェクトを含むすべてのユーザーインタフェースビュー.
•アクティブなメッセージの受信に加えて、応答者はターゲットの不特定のアクションメッセージを受信することもある.
•最初にアクティビティを受信したオブジェクトは、first responderと呼ばれます.

事件を処理するために?


•応答者は、イベントに対応する方法を過剰に実施しなければならない
•応答者は、UIキットから提供されるイベント情報を使用して、タッチの変化を追跡し、アプリケーションのUIをタイムリーに更新します.
touchesBegan(_:with:)
touchesMoved(_:with:)
touchesEnded(_:with:)
touchesCancelled(_:with:) 

Responder Chain


•イベントに基づいてチェーンにリンクを受信する
•イベントを受信するために、応答者は自分が第一応答者になれることを示す必要があります.
first responderから、応答者がイベントを処理していない場合、イベントは、応答者チェーンに接続された次のオブジェクトに転送される(イベントを処理するために適切なオブジェクトを検索する)
•メッセージが処理されるまでChainの親に移動(最後まで処理されていない場合はメッセージを破棄)

First Responder


•イベントを最初に受信したオブジェクト
•イベントの処理に最適な応答者

𕼣第一応答設定?


UIresponderのサブクラスでは、canBecomeFirstResponder propertyを上書きしてtrueを返すように設定します.
また、UIKETは、受信したイベントの種類に応じて、そのイベントのfirst responderとして特定のオブジェクトを指定する.
イベントタイプFirst Responder TouchビューPressフォーカスビューShake-MotionUIKEによって指定されたオブジェクト、または直接指定されたリモート制御イベントUIKEによって指定されたオブジェクト、または直接指定された編集メニューメッセージUIKEによって指定されたオブジェクト、または直接指定された
hit-test
イベントがトリガーされると、UIKETはhit-testを使用してイベントが発生したビューを検索します.
タッチを含むビューレイヤを探し、ラッコレイヤの最も奥にあるサブビューを探します.first responder 로 지정한다.
その後、First Responderがイベントを処理できない場合は、Responder Chainに従ってイベントを送信します.
(無効または透明度が0.01未満のサブビューは無視されます.)
コメントドキュメント
https://seizze.github.io/2019/11/26/iOS%EC%9D%98-Responder%EC%99%80-Responder-Chain-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0.html