我有一个UIScrollView填充我的应用程序的一页上的屏幕,但是我想允许用户从屏幕边缘平移以显示其背后的视图.问题是UIScrollView从屏幕边缘的UIScreenEdgePanGestureRecognizer中窃取触摸.不幸的是,我无法从具有UIScrollView(反之亦然)的视图控制器访问UIScreenEdgePanGestureRecognizer,所以我无法使用requireGestureRecognizerToFail的方法:因为我无法指定哪个手势识别器应该被允许失败.具有滚动视图的视图控制器是容器视图控制器的子视图控制器,其具有附加到容器视图控制器自己的视图之一的屏幕边缘平移手势识别器.
我也无法使用委托方法
-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
因为UIScrollView不允许我将视图控制器设置为滚动视图的UIPanGestureRecognizer的委托.
如何防止滚动视图从我自己的手势识别器中窃取边缘平移触摸?
解决方法
不幸的是,创建此行为可能是一个真正的P *** i * t ** A **.
幸运的是,即使您无法直接访问GestureRecognizer,也可以使用UIGestureRecognizer Delegate创建此行为.
-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer: -(BOOL)gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: -(BOOL)gestureRecognizer:shouldBerequiredToFailByGestureRecognizer:
传递给委托方法的第二个参数(“otherGestureRecognizer”)会保留UIScrollView的PanGestureRecognizer(或私有Apple子类),当您的手势识别器与scrollView的“碰撞”时.
所以只需设置你的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行为都可以通过使用委托方法来实现.但是如上所述,方法的命名只是很混乱.对于这些方法,没有什么有用的文档.