0

ここに問題があります: NSLog を使用して TapGestureRecognizer をテストしたいのですが、TapGestureRecognizer は UIWebView 以外の場所で機能し、その理由がわかりません...

ここに私のコードがあります:

-(void)viewDidLoad {
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bookmarker:)];
tapGesture.numberOfTapsRequired = 2;
[self.view addGestureRecognizer:tapGesture];
[tapGesture release];
   }

IBAction は次のとおりです。

-(IBAction)bookmarker:(UITapGestureRecognizer *)trecognizer{
NSLog(@"TAPPED");
}

これは私が機能させたいビューです:

http://i.stack.imgur.com/3UPor.png

そして、これはそれが機能するビューです:

http://i.stack.imgur.com/nGmwq.png

(レップポイントが10未満で申し訳ありません。写真を投稿できません)

4

2 に答える 2

1

WebビューはTapGestureRecognizerを受け入れないことがわかりました。これは、TapGestureRecognizerに独自のジェスチャのセットがあるため、次のように実装するためです。

ヘッダーでUIGestureRecognizerデリゲートを作成します

(viewDidLoad内)

tapGesture.delegate = self;

次に、以下を実装します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

{
 return YES;
}
于 2012-08-17T16:07:21.630 に答える
1

レコグナイザーをトップ ビューに追加すると、そのビューのサブビューもジェスチャ レコグナイザーのアクションをトリガーします。

ドキュメントごと。

ジェスチャ レコグナイザーをビューにアタッチすると、表示されるジェスチャの範囲が定義され、そのビューとそのすべてのサブビューに対してヒット テストされたタッチを受け取るようになります。ビューはジェスチャ レコグナイザーを保持します。

レコグナイザーのタッチ位置をチェックして、それがサブビュー内のどこかにあるかどうかを確認できます。

- (CGPoint)locationInView:(UIView *)view

その後、チェックを行います。

bool CGRectContainsPoint (
   CGRect rect,
   CGPoint point
);

メモリから書いて、うまくいくことを願っています:

CGPoint point = [recognizer locationInView:self.view];
CGRect rect = subView.frame;
bool inside = CGRectContainsPoint(rect, point);

if (!inside) {
    //do your code
}
于 2012-08-16T03:18:22.763 に答える