我有一个在我的应用程序的一个页面上充满屏幕的UIScrollView,但我想让用户从屏幕的边缘平移,以显示其背后的视图。问题是,UIScrollView偷走了我屏幕边缘的UIScreenEdgePanGestureRecognizer的触感。不幸的是,我不能从具有UIScrollView的视图控制器访问UIScreenEdgePanGestureRecognizer (反之亦然),因此我不能使用requireGestureRecognizerToFail:方法,因为我不能指定哪个手势识别器应该失败。具有滚动视图的视图控制器是容器视图控制器的子视图控制器,该容器视图控制器具有附加到容器视图控制器自己的视图之一的屏幕边缘平移手势识别器。
我也不能使用委托方法
-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:因为UIScrollView不允许我将视图控制器设置为滚动视图的UIPanGestureRecognizer的委托。
如何防止scrollview从我自己的手势识别器中窃取平移的边缘?
发布于 2014-02-15 17:32:36
不幸的是,创建此行为可能是真正的P* i* t** A**。
幸运的是,即使您不能直接访问GestureRecognizer,也可以使用UIGestureRecognizer委托创建此行为。
-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
-(BOOL)gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
-(BOOL)gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer: 在委托方法中传递的第二个参数('otherGestureRecognizer')保存UIScrollView的PanGestureRecognizer (或私有的Apple子类),当你的gestureRecognizer与滚动视图‘冲突’时。
因此,只需设置UIScreenEdgePanGestureRecognizer的委托来回复委托方法。
这两个方法的命名非常不理想,老实说,我真的不知道您的情况下正确的返回值是什么。
我昨天才遇到这个问题,我通过残酷的试验和错误解决了它。
以我为例,shouldRequireToFail和shouldBeRequiredToFail方法都返回NO,同时方法返回YES解决了我的问题。
Note: Returning NO from both methods changed the behavior compared to not
even implementing the methods at all. Even though the documentation says
the default return value is NO.但是,任何委托行为都可以通过使用GestureRecognizer方法来实现。但正如我上面所说的,方法的命名非常令人困惑。+几乎没有关于这些方法的有用文档。
发布于 2015-10-20 00:21:24
这可以在不必将屏幕平移手势的委托设置为视图控制器的情况下完成。
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:screenPanGesture];https://stackoverflow.com/questions/21794778
复制相似问题