2010年5月14日金曜日

タッチイベントの補足

タッチイベントはUIResponderクラスが行います。
UIResponderはUIViewクラスのスーパークラスであり、UIViewクラスは他の様々なユーザインターフェース(ラベルやボタン、スライダーやその他のコントロール群)のスーパークラスなのでほとんどのコントロールがUIResponderクラスの機能でタッチイベントを処理することが可能です。

タッチイベントを実装するには、UIResponderクラスのタッチイベントをオーバーライドします。

タッチイベントには以下のようなものがあります。


- (void) touchesBegan: (NSSet*) touches withEvent: (UIEvent*) event
タッチの開始


- (void) touchesMoved: (NSSet*) touches withEvent: (UIEvent*) event
タッチのドラッグ操作


- (void) touchesEnded: (NSSet*) touches withEvent: (UIEvent*) event
タッチの終了


- (void) touchesCancelled: (NSSet*) touches withEvent: (UIEvent*) event
通話等でタッチ操作がキャンセルされた



「NSSet」というのは、タッチ操作に関する情報を保持する、UITouchクラスのインスタンスを保持するクラスです。タッチ操作は複数の指で行われますので、NSSetクラスで複数のUITouchインスタンスを保持します。

UITouchクラスは、タッチ回数やタッチ時刻、タッチ対象のビュー、位置等を保持するクラスです。NSSetクラスからUITouch情報を取得するには、「anyObject」メソッドや「allObjects」を使います。

    // UITouchを全て取り出す
    NSArray* array = [ touches allObjects ];
    for ( i = 0 ; i < [ array count ] ; i++ ) {
        UITouch touch = [ array objectAtIndex: i ];
    }

    // UITouchを1つ取り出す
    UITouch touch = [ touches anyObject ];


UIEventクラスは、イベント発生時刻の他、他コントロールにあるタッチ情報も含め、全てのタッチ情報を保持しています。

0 件のコメント:

コメントを投稿