2016-08-26 350 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