我需要一个分页的UIScrollView,它以UIScreenEdgePanGestureRecognizer的方式检测屏幕边缘的平移,而不是像UIPanGestureRecognizer一样在所有位置检测平移。

我可以从[scrollView panGestureRecogniser]获取scrollView实例,但不能将其替换为UIScreenEdgePanGestureRecognizer实例。

也不可能将[[scrollView panGestureRecogniser] delegate]更改为在我控制之下的对象,该对象可以停止滚动手势,除非它们从边缘开始,因为UIScrollView不允许您更改它的UIGestureReconiser的委托。

最佳答案

事实证明,实现这种效果比使用我已经熟悉的技术要容易得多。

如问题中所述,您可以使用[myScrollView panGestureRecogniser]来访问滚动视图的平移手势识别器。尽管您无法更改此手势识别器的委托,但是您可以更改其用于发起手势的视图,而不必是滚动视图实例本身。

[edgePanGestureHolder addGestureRecognizer: [scrollView panGestureRecognizer]];
edgePanGestureHolder只是一个从一个边缘延伸到另一个边缘的视图,并包含滚动视图的手势识别器。

edgePanGestureHolder的顶部放置另一个视图innerPanPreventioninnerPanPrevention不应一直延伸到屏幕边缘。

通过此设置,从边缘开始的平移将在edgePanGestureHolder中找到滚动视图的手势识别器。从视图中间开始的潜在平移将在innerPanPrevention中寻找手势识别器,并且找不到手势识别器,从而阻止了滚动视图的平移。

就我而言,我还将UIGestureRecogniser添加到innerPanPrevention。这些驱动其他滚动视图。从屏幕边缘开始的平移驱动一个滚动视图,从屏幕内部开始的平移驱动另一个滚动视图。

09-15 22:57