我在UIScrollView的内部有一个UIView,其中包含UITapGestureRecognizer。我遇到了问题,快速谷歌搜索并没有帮助我。如果用户改为滚动视图,如何取消UIGestureRecognizer状态。我知道UIScrollView通知手势识别器它应该取消触摸时的复杂解决方案。我也和手势代表一起玩,但是没有成功。但是应该有一个更简单的解决方案,例如,我将UICollectionView放在该视图中,例如,它可以识别滚动并且不会通知其委托人已选中该单元格。
前几天我在做类似的事情,希望对您的情况有所帮助。在我的示例中,HammerB是一个UIButton,但是您可以使用其他类型。
//for tripple tap
let tap1 = UITapGestureRecognizer(target: self, action: #selector(trippleTapped))
tap1.numberOfTapsRequired = 3
tap1.accessibilityLabel = "\(hammerN)"
hammerB.addGestureRecognizer(tap1)
//for double tap
let tap2 = UITapGestureRecognizer(target: self, action: #selector(doubleTapped))
tap2.numberOfTapsRequired = 2
tap2.accessibilityLabel = "\(hammerN)"
tap2.require(toFail: tap1)
hammerB.addGestureRecognizer(tap2)
//for singleTap
let tap3 = UITapGestureRecognizer(target: self, action: #selector(tappedB))
tap3.numberOfTapsRequired = 1
tap3.accessibilityLabel = "\(hammerN)"
tap3.require(toFail: tap2)
hammerB.addGestureRecognizer(tap3)
一般的想法是使用require(toFail: yourGesture)
方法。
编辑:我最终遇到一个相关问题的解决方案是在我的方法中放置一个条件,并使用选择器作为目标,以检查应用程序的状态并创建“拖动”状态。我不确定您的应用程序是如何工作的,但是如果您放置一个条件语句来检查方法中某些“拖动”值,并且该值是true,则什么也不做。您也许可以绕过代表。
祝你好运!