Tyl*_*ier 16 iphone uiscrollview uigesturerecognizer ios uipangesturerecognizer
我有一个UIScrollView填充我的应用程序的一个页面上的屏幕,但我想让用户从屏幕边缘平移以显示它背后的视图.问题是UIScrollView窃取了我UIScreenEdgePanGestureRecognizer在屏幕边缘的触摸.不幸的是,我无法访问UIScreenEdgePanGestureRecognizer具有UIScrollView(反之亦然)的视图控制器,因此我无法使用该方法,requireGestureRecognizerToFail:因为我无法指定应该允许哪个手势识别器失败.具有滚动视图的视图控制器是容器视图控制器的子视图控制器,其具有附加到容器视图控制器自己的视图之一的屏幕边缘平移手势识别器.
我也无法使用委托方法
-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
Run Code Online (Sandbox Code Playgroud)
因为UIScrollView不允许我将视图控制器设置为滚动视图的委托UIPanGestureRecognizer.
如何防止滚动视图从我自己的手势识别器中窃取边缘触摸?
Cab*_*bus 23
不幸的是,创建这种行为可能是一个真正的P***i*t**A**.
幸运的是,即使您无法直接访问一个GestureRecognizer,也可以使用UIGestureRecognizer Delegate创建此行为.
-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
-(BOOL)gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
-(BOOL)gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:
Run Code Online (Sandbox Code Playgroud)
当你的gestureRecognizer'与scrollView'碰撞'时,委托方法中传递的第二个参数('otherGestureRecognizer')会保存UIScrollView的PanGestureRecognizer(或私有的Apple - 子类).
因此,只需设置UIScreenEdgePanGestureRecognizer的委托即可回复委托方法.
这两种方法的命名非常不理想,说实话,我真的不知道你的案例的正确返回值是什么.
我昨天刚遇到这个问题,我通过残酷的试验和错误解决了这个问题.
在我的情况下,从ShouldRequireToFail和shouldBeRequiredToFail方法返回NO并且来自simultaneous-method的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.
Run Code Online (Sandbox Code Playgroud)
但是,可以使用委托方法实现任何GestureRecognizer行为.但正如我上面所说,这些方法的命名非常混乱.+这些方法没有任何有用的文档.
kev*_*guy 15
这可以在不必将屏幕平移手势的委托设置到视图控制器的情况下完成.
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:screenPanGesture];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9640 次 |
| 最近记录: |