将 UITapGesture 添加到 UIScrollView



我有一个UIScrollView。 我给它做了一个点击手势,如下所示:

self.tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapped(_:)))
self.tapGesture.delegate = self
self.tapGesture.numberOfTapsRequired = 1
self.tapGesture.numberOfTouchesRequired = 1
self.tapGesture.cancelsTouchesInView = false
self.tapGesture.delaysTouchesBegan = false
self.tapGesture.delaysTouchesEnded = false
self.scrollView.addGestureRecognizer(self.tapGesture)

这工作正常,除非滚动视图正在滚动(滚动动画正在发生,而不是用户拖动(,点击手势将被忽略。

我如何对滚动视图进行动画处理:

UIView.animate(withDuration: 0.3, delay: 0.0,
                           options:[.beginFromCurrentState, .curveEaseInOut], animations:
    {
        self.scrollView.contentOffset = CGPoint(x:self.scrollView.contentOffset.x, y:yOffset)
    },  completion: nil)
这个滚动视图

大部分时间都在滚动,我试图让它在滚动视图滚动动画时识别点击手势......

看看 UIGestureRecogniserDelegate 函数。

您应该能够指定可以使用以下功能同时识别平移和点击手势:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, 
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return (gestureRecogniser is UIPanGestureRecogniser || gestureRecogniser is UITapGestureRecogniser) && (otherGestureRecognizer is UIPanGestureRecogniser || otherGestureRecognizer is UITapGestureRecogniser) 
}

注意:确保您的类符合 UIGestureRecogniserDelegate 协议,并且您将手势委托设置为自己。

这应该有效,但我现在无法完全测试它。

更新:

如果您尝试在动画过程中识别点击,则可能需要使用 UIView.animateWithDuration 选项中的UIViewAnimationOptions.AllowUserInteraction选项。使用另一个答案作为来源

相关内容

  • 没有找到相关文章

最新更新