对UIScrollView使用UIScreenEdgePanGestureRecognizer

时间:2014-06-24 11:50:37

标签: uiscrollview uikit uigesturerecognizer

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

我可以从[scrollView panGestureRecogniser]获取scrollView个实例,但我无法将其替换为UIScreenEdgePanGestureRecognizer的实例。

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

1 个答案:

答案 0 :(得分:6)

使用我已经熟悉的技术,实现这种效果比我预期的要容易。

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

[edgePanGestureHolder addGestureRecognizer: [scrollView panGestureRecognizer]];

edgePanGestureHolder只是一个从边缘延伸到边缘的视图,并为滚动视图保存手势识别器。

edgePanGestureHolder之上放置另一个视图innerPanPreventioninnerPanPrevention不应该一直延伸到屏幕边缘。

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

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