2

UITapGestureRecognizer をアプリに追加して、2 本の指のタップすべてを検出して操作できるようにしようとしていますが、他のユーザー入力はすべて通過させます。些細なことに聞こえますが、私はそれを機能させることができません。メインビューコントローラー内のこれまでのコードは次のとおりです。

- (void) viewDidLoad {
  // other init stuff
  UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
  [tapRecognizer setNumberOfTouchesRequired:2];
  [tapRecognizer setNumberOfTapsRequired:1];
  [tapRecognizer setCancelsTouchesInView:NO];

  UIView *tapHolderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
  [tapHolderView setMultipleTouchEnabled:YES];
  [tapHolderView addGestureRecognizer:tapRecognizer];

  [self.view addSubview:tapHolderView];

  [tapRecognizer release];
}

- (void) handleTap:(UITapGestureRecognizer *) sender {
  if (sender.state == UIGestureRecognizerStateEnded) {
    // do something
  }
}

何が起こるか: 2 本の指でタップすると、handleTap メソッドがトリガーされます。スワイプ、ピンチ、1 本指タップなど、その他のユーザー入力は、他のビュー (特に UIToolbar、UIWebView) によって取得されません。

これに関する洞察をいただければ幸いです。問題について十分に具体的でない場合はお知らせください。

4

3 に答える 3

6

ビュー コントローラーを UIGestureRecognizerDelegate のデリゲートに設定してみてください。また、常に「YES」を返すように、gestureRecognizer:shouldRecognizeSimulaneouslyWithGestureRecgonizer を実装してみてください。例:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
于 2012-06-07T07:58:25.743 に答える
1

私が考えることができる唯一のことは、次の使用です。

 [tapRecognizer setDelegate:self];

ビュー コントローラーでジェスチャ レコグナイザーのデリゲート メソッドを定義しましたか? 簡単なテストのためにその行をコメントアウトしてみてください。

于 2012-06-07T07:38:06.767 に答える
0

同じビューでシングルタップとダブルタップのジェスチャを実装しました。お役に立てれば

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] 
                                     initWithTarget:self 
                                     action:@selector(handleSingleTapOnMainImageView:)];

[self addGestureRecognizer:singleTap];
[singleTap release];

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] 
                                     initWithTarget:self 
                                     action:@selector(handleDoubleTapOnMainImageView:)];
[doubleTap setNumberOfTapsRequired:2];
[singleTap requireGestureRecognizerToFail:doubleTap];
[self addGestureRecognizer:doubleTap];
[doubleTap release];
于 2012-06-07T07:56:45.073 に答える