我需要一个分页的UIScrollView
,它以UIScreenEdgePanGestureRecognizer
的方式检测屏幕边缘的平移,而不是像UIPanGestureRecognizer
一样在所有位置检测平移。
我可以从[scrollView panGestureRecogniser]
获取scrollView
实例,但不能将其替换为UIScreenEdgePanGestureRecognizer
实例。
也不可能将[[scrollView panGestureRecogniser] delegate]
更改为在我控制之下的对象,该对象可以停止滚动手势,除非它们从边缘开始,因为UIScrollView
不允许您更改它的UIGestureReconiser
的委托。
最佳答案
事实证明,实现这种效果比使用我已经熟悉的技术要容易得多。
如问题中所述,您可以使用[myScrollView panGestureRecogniser]
来访问滚动视图的平移手势识别器。尽管您无法更改此手势识别器的委托,但是您可以更改其用于发起手势的视图,而不必是滚动视图实例本身。
[edgePanGestureHolder addGestureRecognizer: [scrollView panGestureRecognizer]];
edgePanGestureHolder
只是一个从一个边缘延伸到另一个边缘的视图,并包含滚动视图的手势识别器。在
edgePanGestureHolder
的顶部放置另一个视图innerPanPrevention
。 innerPanPrevention
不应一直延伸到屏幕边缘。通过此设置,从边缘开始的平移将在
edgePanGestureHolder
中找到滚动视图的手势识别器。从视图中间开始的潜在平移将在innerPanPrevention
中寻找手势识别器,并且找不到手势识别器,从而阻止了滚动视图的平移。就我而言,我还将
UIGestureRecogniser
添加到innerPanPrevention
。这些驱动其他滚动视图。从屏幕边缘开始的平移驱动一个滚动视图,从屏幕内部开始的平移驱动另一个滚动视图。