イベント(iOS)
iOS のイベントは、指がアプリのビューを触ったり、ユーザーがデバイスを振った事を表します。1本以上の指がおそらく動き回ったり、1つまたは複数のビューにタッチダウンしたり、1つ以上のビューから離れます。これが起こっているように、iPhone のマルチタッチシステムは、イベントとして、これらのタッチを登録し、処理のために、現在アクティブなアプリに送信します。最後の指がそのビューから離れるまで、第1の機能は、ビューにタッチダウンした瞬間から可能なタッチ動作のこの範囲は、マルチタッチシーケンス を定義します。アプリ(およびフレームワークオブジェクト) は、通常、それらがピンチやスワイプのようなジェスチャーかどうかを判断するために、マルチタッチシーケンスを分析します。
ユーザーがデバイスを振ると、オペレーティングシステムは、モーションイベントを生成できます。これらは、アプリへの個別のイベントとして配信されます。
オブジェクトはビューに触れる指を表現
ビューに触れる指は、UITouch オブジェクトによって表されます。タッチオブジェクトは、指が触れているビュー、ビュー内の指の位置、タイムスタンプ、および位相などの情報を含みます。タッチオブジェクトは、指定された順序でマルチタッチシーケンスの間にいくつかの段階を経ます:
UITouchPhaseBegan
指がビューに触れしました。
UITouchPhaseMoved
指がそのビューまたは隣接するビューに移動しました。
UITouchPhaseEnded
指がビューから離れました。
タッチオブジェクトはまた固定相であり、またはキャンセルできます。タッチオブジェクトは、マルチタッチシーケンスを通じて永続的であるが、それらの状態が突然変異。それは処理のためビューにタッチオブジェクトを配信すると、アプリケーションパッケージは、UIEvent オブジェクト内のタッチオブジェクトをパッケージします。
タッチオブジェクトの配信は、定義された経路をたどる
メインイベントループでは、アプリケーションオブジェクトは、そのイベントキュー内の(生) タッチイベントを取得し、UIEvent オブジェクト内の UITouch オブジェクトとしてそれらをパッケージ化し、タッチが発生したビューのウィンドウにそれらを送信します。ウィンドウオブジェクトは、今度は、ヒットテストビュー として知られている、このビューにこれらのオブジェクトを送信します。(通常はそれが必要なイベント処理メソッドを実装していないので) このビューはタッチイベントを処理できない場合は、それが処理または廃棄されるまで、イベントはレスポンダチェーンを登って行きます。
イベントを処理するために4つのメソッドをオーバーライド
カスタムビューとビューコントローラを含むレスポンダオブジェクトは、UIResponder クラスによって宣言された4つのメソッドを実装することによって、イベントを処理します。
- touchesBegan:withEvent: Began 相でタッチオブジェクトによって呼び出されます。
- touchesMoved:withEvent: Moved 相でタッチオブジェクトによって呼び出されます。
- touchesEnded:withEvent: Ended 相でタッチオブジェクトによって呼び出されます。
- touchesCancelled:withEvent: 一部の外部イベント、例えば、着信電話でオペレーティングシステムがマルチタッチシーケンス内のタッチオブジェクトをキャンセルした時に呼び出されます。
各メソッドの最初の引数は、指定された相でのタッチオブジェクトのセットです。 2番目の引数は、現在のマルチタッチシーケンス内のすべてのタッチオブジェクトを追跡する UIEvent オブジェクトです。
デフォルトでは、ビューは、マルチタッチイベントを受信できます。それらの userInteractionEnabled プロパティが NO に設定されているため、一部の UIKit ビュークラスのインスタンスは、しかし、マルチタッチイベントを受け取れません。これらのクラスをサブクラス化し、イベントを受信したい場合は、このプロパティを YES に設定してください。カスタムビューとビューコントローラはすべての4つのメソッドを実装する必要がありますが、UIKit ビュークラスのサブクラスは、相または関心のある相に対応するメソッドを実装するだけの責任があります。このケースでは、しかし、それらは最初にスーパークラスの実装を呼び出すようにしなければなりません。
モーションイベントの処理
デバイスの加速度計を介して、オペレーティングシステムは特定のモーションを検出し、アクティブなアプリケーションにイベントとしてこれらを送信します。(現在サポートされるモーションは、デバイスを振ることだけです。) ファーストレスポンダは、最初、これらのモーションイベントを(UIEvent オブジェクトとして) 受け取り、それらを扱うことができない場合、それらは、レスポンダチェーンを登って行きます。モーションが始まるときと、それが停止したときだけにシステムは、アプリケーションに通知します。対応 する UIResponder メソッドは motionBegan:withEvent: と motionEnded:withEvent: です。取扱レスポンダオブジェクトに渡された唯一の情報は、イベントオブジェクトによってカプセル化されたデータです。イベントタイプ(この場合は、UIEventTypeMotion) 、イベントサブタイプ(この場合、 UIEventSubtypeMotionShake) およびタイムスタンプ。
前提条件の記事
関連記事
アプリケーションオブジェクトメインイベントループ
ビュー・オブジェクト
ターゲットアクション
既知の議論
iOS 環境
サンプルコードプロジェクト
レスポンダメソッドとジェスチャー認識装置を使用してタッチを処理