如何通过 panGestureRecognizer 启用 collectionView 分页

Posted

技术标签:

【中文标题】如何通过 panGestureRecognizer 启用 collectionView 分页【英文标题】:How do I enable collectionView paging over a panGestureRecognizer 【发布时间】:2018-02-19 08:32:43 【问题描述】:

我目前有一个 panGesture 识别器附加到一个也启用了分页的 collectionView。

问题是 panGesture 覆盖了分页。如果可能的话,我希望在 panGesture 之前执行分页。

我正在使用 panGesture 垂直移动 collectionView 并通过分页水平滑动单元格。

【问题讨论】:

如果没有 panGesture 可以吗? 【参考方案1】:

我们可以在没有 PanGesture 的情况下通过检测 collectionview 的滚动来实现相同的功能。

func scrollViewDidScroll(_ scrollView: UIScrollView)          
 let visibleRect = CGRect(origin: collectionViewCreateNewGame.contentOffset, size: collectionViewCreateNewGame.bounds.size)
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
let indexPath = collectionViewCreateNewGame.indexPathForItem(at: visiblePoint)
pageControl.currentPage = (indexPath?.row)!

【讨论】:

【参考方案2】:

我最终做的是遍历collectionView的gestureRecognizers:

if let gestureRecognizers = collectionView.gestureRecognizers 
    for gestureRecognizer in gestureRecognizers 
         print(gestureRecognizer)
    

通过打印每一个并阅读描述,很明显分页是由 index 1 处的gestureRecognizer (UIScrollViewPagingSwipeGestureRecognizer) 完成的

然后我用了:

myPanGesture.require(toFail: collectionView.gestureRecognizers![1])

它有效,但在我的使用中有些滞后。我想这在其他情况下可能会有所帮助,所以我发布了我的解决方案。

【讨论】:

以上是关于如何通过 panGestureRecognizer 启用 collectionView 分页的主要内容,如果未能解决你的问题,请参考以下文章

如何将 panGestureRecognizer 添加到 TableView,并且在识别平底锅时仍然让 tableview 滚动?

对于 UIScrollview,我如何使用自己的 panGestureRecognizer 但允许 scrollView 使用其识别器进行反弹?

使用 PanGestureRecognizer 创建 UIView 并在不抬起手指的情况下激活它

是否可以将 PanGestureRecognizer 用于 tvOS?

PanGestureRecognizer 的有限区域

在 iOS 中,为啥拖过 UIImageView 不会结束 PanGestureRecognizer?