允许在UIScrollView中同时使用单击手势识别器和双击手势识别器。

4
所以我有一个UIImageView在UIScrollView内部,我需要捕获以下两个手势: - 单击手势 - 双击手势
双击手势应该作为缩放的操作发送到UIScrollView中。 单击手势由我自己创建的UITapGestureRecognizer捕获。 当存在双击时,双击手势具有更高的优先级(缩放UIScrollView),否则执行单击手势。
到目前为止,如果将单击手势识别器添加到UIScrollView中,单击手势会立即被识别,并且无法识别双击手势。
如果将单击手势识别器添加到imageview中,则永远不会接收任何操作,但双击正常工作。
如有建议,请提出,谢谢。
2个回答

7

请尝试以下代码:

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)

1
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];

通过上述语句,您是在询问是否只有单击才会被识别,而不是双击。

但是双击的tap recognizer是uiscrollview的内部识别器,这样做仍然有效吗? - Max One
我刚刚尝试了 [singleTap requireGestureRecognizerToFail:_scrollView.gestureRecognizers[0]]; 然后程序崩溃了.. - Max One

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接