如何通过 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 并在不抬起手指的情况下激活它