在具有相同触摸的视图上切换手势
Posted
技术标签:
【中文标题】在具有相同触摸的视图上切换手势【英文标题】:Switch between gestures on a view with same touch 【发布时间】:2017-01-06 05:50:12 【问题描述】:在UICollectionView
中我添加了UIPanGestureRecognizer
。起初UIPanGestureRecognizer
被禁用,我想在UICollectionView
的contentOffset.y
在滚动过程中达到某个值时启用它。我试图通过以下代码来实现这一点。但它仅适用于屏幕上的第二次触摸。当 contentOffset.y 为 44 时,我想在不松开手指的情况下使用手势。
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
if collectionView.contentOffset.y == CGFloat(44)
return false
return true
【问题讨论】:
【参考方案1】:是的。根据您的逻辑,它仅在第二次触摸时发生。尝试在 scrollView Delegate 方法中启用或禁用平移手势,如下所示。
func scrollViewDidScroll(scrollView: UIScrollView)
if collectionView.contentOffset.y < CGFloat(44)
panGesture.enabled = false
panGesture.enabled = true
【讨论】:
感谢人的回答。但我需要取下手指并再次触摸以处理该逻辑。【参考方案2】:在你的手势开始状态检查条件
func gestureTap(sender : UIGestureRecognizer)
if sender.state == .began
if collectionView.contentOffset.y == CGFloat(44)
else
return
或者
在 scrollView Delegate 方法中你也可以检查。检查下面
func scrollViewDidScroll(scrollView: UIScrollView)
if collectionView.contentOffset.y < CGFloat(44)
yourGesture.enabled = false
else
yourGesture.enabled = true
【讨论】:
感谢人的回答。要使用第一个回答手势,应启用,如果启用,则无法滚动。最主要的是在滚动过程中,我们应该放下手指并再次触摸以处理该逻辑。实际上,只有当 contentOffset.y 为 44 时,我才需要使用手势。 @sant05 更新答案以上是关于在具有相同触摸的视图上切换手势的主要内容,如果未能解决你的问题,请参考以下文章