在 UIScrollView 中允许单击手势识别器和双击

Allow both single tap gesture recognizer and double tap in UIScrollView

所以我在 UIScrollView 中有一个 UIImageView,我需要捕获两者: - 单击手势 - 双击手势 对于 UIImageView

双击手势应该作为缩放动作发送到 UIScrollView 单击手势由我自己创建的 UITapGestureRecognizer 捕获。 双击手势比单击具有更高的优先级(当有双击时,放大滚动视图,否则执行单击)

到目前为止,如果我将单击手势识别器添加到滚动视图,则单击会立即被识别,而不会识别双击。

如果我将单击手势识别器添加到图像视图,它不会收到任何动作,但双击可以工作

欢迎任何建议,谢谢..

UITapGestureRecognizer *tapRecognizerForSingleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapAction:)];
[tapRecognizerForSingleTap setNumberOfTapsRequired:1];

UITapGestureRecognizer *tapRecognizerForDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapAction:)];
[tapRecognizerForDoubleTap setNumberOfTapsRequired:2];

两者都添加到同一个图像视图中,要实现您想要的效果,只需添加以下行。

[tapRecognizerForSingleTap requireGestureRecognizerToFail:tapRecognizerForDoubleTap];

上面这行你要求的是单击,只有当它不是双击时才会被识别。

试试这个代码,

Objective - C

 UITapGestureRecognizer *singletap = [[UITapGestureRecognizer alloc]
                                                     initWithTarget:self
                                                     action:@selector(singleTap:)];
    singletap.numberOfTapsRequired = 1;
    singletap.numberOfTouchesRequired = 1;

[scrollView addGestureRecognizer:singletap];


UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]
                                                 initWithTarget:self
                                                 action:@selector(doubleTap:)];
doubleTap.numberOfTapsRequired =2 ;
doubleTap.numberOfTouchesRequired = 1;

[scrollView addGestureRecognizer:doubleTap];



[singleTap requireGestureRecognizerToFail:doubleTap];

Swift 3.0

var singletap = UITapGestureRecognizer(target: self, action: #selector(self.singleTap))
singletap.numberOfTapsRequired = 1
singletap.numberOfTouchesRequired = 1
scrollView.addGestureRecognizer(singletap)
var doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTap))
doubleTap.numberOfTapsRequired = 2
doubleTap.numberOfTouchesRequired = 1
scrollView.addGestureRecognizer(doubleTap)
singleTap.require(toFail: doubleTap)

最上面的答案居然把最后一行倒过来了。正确的代码应该是:

[singleTap requireGestureRecognizerToFail:doubleTap];