2009/11/09

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

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

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

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