首页 > 解决方案 > iOS - 在屏幕边缘检测 panGesture 以打开侧面菜单 + UICollectionView 与水平滚动

问题描述

我的 UIViewController 中只有一个 UICollectionView。

我正在使用 SWRevealViewController 打开左侧/右侧菜单。我可以设置它的 panGestureRecognizer 来提供全屏平移。

view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

以下方法将提供一个适合添加到任何视图的 panGestureRecognizer,以便执行通常的拖动和滑动手势以显示后视图。这通常添加到前端控制器的顶部栏,但它可以添加到您的 frontViewController 视图或显示控制器视图以提供全屏平移。默认情况下,panGestureRecognizer 被添加到包含前端控制器视图的视图中。为了保持这个默认行为,你仍然需要调用这个方法,只是不要将它添加到你的任何视图中。默认设置允许您在不影响识别器的情况下禁用控制器视图上的用户交互。

我的问题是,在 UICollectionView 的特定单元格上,边缘没有任何间距。cellWidth = collectionView.bounds.size.width AND这个单元格包含一个带有水平滚动的 UICollectionView。

而不是打开我的左/右菜单,它只是水平滚动我的 UICollectionView。

我想处理这种情况:

1:如果 panGesture 位于包含 UICollectionView 的 UICollectionViewCell 内,并且水平滚动。

2:检测横轴上的手势位置,如果在屏幕边缘,不触发UICollectionView的水平滚动而是触发panGesture打开菜单。

在阅读了很多文章和官方文档后,我发现了这个UIScreenEdgePanGestureRecognizer

而且这个逻辑应该通过重写方法shouldReceiveTouch来完成,对吗?

关于我应该如何实现这个的任何提示?

编辑:

在阅读了评论中建议的问题后,这是我尝试过的,但它不起作用。

let edgePanGesture = UIScreenEdgePanGestureRecognizer()
collectionView.panGestureRecognizer.require(toFail: edgePanGesture)

我在包含水平 collectionView 的单元格中设置了它,但它不起作用。

我可能遗漏了一些东西,有什么帮助吗?

标签: iosswiftuipangesturerecognizerswrevealviewcontrollerside-menu

解决方案


推荐阅读