2012-04-22 2 views
6

私はバックグラウンドビューを持っているアプリを作っていますが、サブビューとしてはUIImageViewが6つあります。私はUITapGestureRecognizerを持っていて、UIImageViewのうちの1つがタップされていて、thie handleTapメソッドがジェスチャレコグナイザが呼び出すものであることを確認します。しかし、これを実行すると、hitTest:withEvent:は、imageViewsの1つをタップしても常にバックグラウンドビューを返します。私はhitTestを呼び出すとイベントと関係がありますか?hitTest:withEvent:Not Working

おかげ

- (void) handleTap: (UITapGestureRecognizer *) sender 
{ 
    if (sender.state == UIGestureRecognizerStateEnded) 
    { 
     CGPoint location = [sender locationInView: sender.view]; 
     UIView * viewHit = [sender.view hitTest:location withEvent:NULL]; 
     NSLog(@"%@", [viewHit class]); 
     if (viewHit == sender.view) {} 
     else if ([viewHit isKindOfClass:[UIImageView class]]) 
     { 
      [self imageViewTapped: viewHit]; 
      NSLog(@"ImageViewTapped!"); 
     } 
    } 
} 

答えて

12

UIImageViewは、デフォルトでは、ユーザとの対話を登録しないように設定されています。

UIImageViewのドキュメントから:

新しいイメージビューオブジェクトは 、デフォルトではユーザーのイベントを無視するように設定されています。 UIImageViewのカスタムサブクラスのイベントを処理する場合は、オブジェクトを初期化した後に、 のuserInteractionEnabledプロパティの値をYESに明示的に変更する必要があります。

view.userInteractionEnabled = YES; 

これは、背面の相互作用を向けるだろう、あなたはタッチイベントを登録することができるはずです。

だから、あなたはあなたの意見を初期化した直後に、あなたが持っている必要があります。

+0

ありがとう! –

1

あり働くあなたのアプローチ(含むビュー上の単一GR)のリライトですが、それは私たちの脳の傷は右の座標系を取得してあげる、確かに問題です投稿されたコード。

もっと良い答えは、Nジェスチャ認識ツールをUIImageViewのそれぞれに付けることです。それらはすべて同じターゲットを持ち、同じhandleTap:メソッドを使用できます。 handleTap:このような任意のジオメトリを検索せずにビューを取得することができます:

UIImageView *viewHit = (UIImageView *)sender.view; 
+0

ああ、プロジェクトはほぼ完了しており、プロジェクト全体でコードスニペットが使用されていますが、後でこれを試してみてください。とにかくありがとう。 –