如何检测滑动,但不能从边缘滑动?

时间:2016-08-26 07:51:49

标签: ios swift uigesturerecognizer swipe

在我的应用中,我想检测向上滑动。当然,我在视图控制器的UISwipeGestureRecognizer添加了view

正如预期的那样,该识别器可以很好地检测滑动。但关于这一点的一个坏处是也检测到从底部边缘的滑动。当用户想要打开控制中心时:

enter image description here

也会检测到滑动。我不希望这种情况发生。

换句话说,我想检测所有向上滑动,除了屏幕下边缘的滑动

我想我也可以使用UIEdgePanGestureRecognizer来检测边缘滑动。并且当检测到这种滑动时,禁用滑动识别器。但这几乎不可能吗?因为谁知道哪个识别器首先检测到手势?

我该怎么做?

P.S。我想我需要使用requireGestureRecognizerToFail,但文档非常糟糕,我无法完全理解。

2 个答案:

答案 0 :(得分:0)

您可以尝试隐藏状态栏,这样就不会出现意外的控制中心开口。当用户从底部滑动时,会出现一个箭头。如果仍然想要打开控制中心,他/她需要再次滑动。

尝试以下代码

override func prefersStatusBarHidden() -> Bool {
return true
}

还有一个解决方案,但我不确定Apple是否会对此感到愤怒。

在.plist中有一个名为“View controller-based status bar appearance”的值。将其设置为NO

答案 1 :(得分:0)

在这种情况下,您应该使用此委托方法

optional func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool

如果您不希望识别器同时触发,请检查otherGestureRecognizer并返回NO

尝试此操作,查看系统是否使用您要避免的手势识别器调用此方法。如果没有,请考虑添加自己的UIScreenEdgePanGestureRecognizerUIRectEdge.Bottom,以便对其进行检查。