2009/11/09

iPhone タップ/タッチのイベントを取得する

タッチ/タップのイベントを取得できるのはUIResponderをスーパークラスに持つクラス。UIResponderを親に持つクラスはレスポンだと呼ばれる。レスポンダはタッチ/タップのイベントを取得することができる。
UIViewはUIResponderを継承している。UIControlはUIViewのサブクラス。つまりInterface Builderで構築されるUIはすべてレスポンダ。イベントは一番手前(? ユーザー直面しているビュー)のレスポンダにまず渡される。イベントを渡されたビューが処理しない場合、次のレスポンダに渡されていき、レスポンダの階層をさかのぼっていく。適時イベントが処理される部分が現れると、イベントは処理され破棄されて、イベントが終了する。
ということらしい。
レスポンダに記述する、イベントを処理するメソッドはこんな感じ。UIEventとしてイベントが渡されている。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
 NSUInteger  numTaps = [[touches anyObject] tapCount];
 NSUInteger numTouches = [touches count];
 NSLog(@"タップの回数 : %d",numTaps);
 NSLog(@"タッチの数: %d",numTouches);
}

Interface Builderで作ったUIでは、イベントはそのビュー(UIButtonとか)でキャッチされて、IBActionとして指定したViewControllerのメソッドに処理がバイパスされていると考えるということかな