2016-08-26 100 views
1

在我的应用程序中,我想检测向上滑动。所以当然,我添加了UISwipeGestureRecognizer到视图控制器的view如何检测一个滑动,但不能从边缘滑动?

正如预期的那样,此识别器可以很好地检测到滑动。但是这样做的坏处在于,还会检测到底部边缘的轻扫。当用户想打开控制中心:

enter image description here

也检测到刷卡。我不希望发生这种情况。

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

我想我也可以使用UIEdgePanGestureRecognizer来检测边缘滑动。当检测到这种滑动时,请禁用滑动识别器。但这仅仅是可能的权利?谁知道哪个识别器首先检测到一个手势?

我该怎么做?

P.S.我想我需要使用requireGestureRecognizerToFail,但文档太糟糕了,我不能完全理解。

回答

0

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

下面

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

try代码没有为这一个多的解决方案,但我不知道苹果是否会生气的这一点。

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

+0

这是另一个问题的答案吗? – hybridcattt

+0

不是。这是故意的。用这种方法用户不会看到控制中心,你的滑动动作将起作用 – batgun

+0

@ batgun的答案有效,你可以试试。 – Yahoho

0

在这种情况下,你应该使用这个委托方法

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

检查otherGestureRecognizer并返回NO,如果你不想让你的识别器与它同时开火。

试试看看系统是否使用您试图避免的手势识别器调用此方法。如果没有,请考虑添加您自己的​​与UIRectEdge.Bottom来替代检查。

+0

我试了一下,这有时会起作用,但有时不会。我认为这是因为您有时可以打开控制中心而不触发边缘平移识别器。 – Sweeper

+0

是的,那可能是。但在这种情况下,你的轻扫手势仍然会发火吗? – hybridcattt

+0

是的。如果您从边缘上方稍微滑动一下,则可以打开控制中心。 – Sweeper