0

我已經看到了我的ViewController的底部(類似於Google Maps底部工作表)。我們的目標是:同時使用平移和滑動手勢識別器

  1. 當掃視,該視圖朝向搖拍方向移動(基本上遵循手指),平移結束時,該視圖去全屏。到目前爲止,所有的作品都很好。

  2. 添加滑動手勢。向上滑動時,視圖應全屏顯示。

的問題是,根據定義,揮動手勢是平移手勢而不是周圍的其他方式。所以除非我的平移效果非常慢,否則即使我仍然在屏幕上拖動,輕掃手勢也會觸發並且視圖將全屏顯示。

簡單的平移看起來不像是那種尋找即時貼。只有當用戶瞬間「輕彈」視圖時,纔會觸發描述的輕掃手勢。如果他們繼續平移,平移手勢應該優先。

任何想法如何實現這一目標?作爲參考,您可以在Android或ios上的谷歌地圖上點擊一個引腳。

它有點難以描述沒有顯示,所以如果它有助於我非常開放澄清事情。

最新通報

  1. 我想了刷卡,將覆蓋盤作爲IM描述的區別是,它一)花了很短的時間量來完成B)的姿態與用戶解除結束手指離開屏幕c)(可能是錯誤的)穿過的區域不應該太大。聽起來很像輕彈我..
+0

你試過shouldRecognizeSimultaneously'FUNC gestureRecognizer(_ gestureRecognizer:UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer:UIGestureRecognizer) - >布爾{ 還真 }' – luckyShubhra

+0

您還可以使用shouldRequireFailureOf方法。 'func gestureRecognizer(_ gestureRecognizer:UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer:UIGestureRecognizer) - > Bool {return true}' – luckyShubhra

回答

0

如果你不能描述明確職責範圍的兩個手勢之間的差異那麼這將是很難分辨的UIGestureRecognizer怎麼做。另外,如果您的手勢過於相似或複雜,您的用戶可能很難弄清楚如何正確地與屏幕交互。也就是說,通過檢查手勢的velocity,您可能能夠區分「滑動」和「平移」。你應該能夠玩弄UIGestureRecognizerDelegate方法,並達到你想要的效果。

+1

我猜想我正在尋找系統似乎不支持的「輕彈」手勢。然而,我知道自定義手勢通常都是nono,因爲我試圖複製谷歌地圖中提供的功能(當點擊一個pin時),以便爲應用程序的地圖部分帶來熟悉的東西,我沒有看到比定製更多的其他方式。 換句話說,也許滑動手勢不是解決我看到的問題的解決方案。 –

+1

這篇文章可以幫助你https://stackoverflow.com/questions/9898627/what-is-the-difference-between-pan-and-swipe-in​​-ios。最終,這些手勢能夠做任何你想做的事情,假設每個手勢都有明確的區分特徵。但是,您必須使用委託方法來實現該效果,並且可能需要進行很多調整。 – Navillus

+0

從你的更新中,似乎你知道你想要什麼,這是一個好的第一步。 – Navillus

0

好吧,我已經達到了所需要的。簡短的回答是我正在尋找一個「輕彈」手勢,而不是一個平移手勢。一般來說,它是一個nono來添加自定義手勢,但作爲即時通訊複製ios的谷歌地圖底部表單組件,它會出現一個自定義手勢是唯一的方法。

使用Navillus的評論,我在平底鍋識別器中添加了速度和姿勢結束檢查。結果是這樣的:

if(recognizer.state == .ended){ 
     if(recognizer.velocity(in: self).y > CGFloat(500)){ 
      self.pullUpViewSetMode_SUMMARY() 
      return; 
     } 

     if(recognizer.velocity(in: self).y < CGFloat(-500)){ 
      self.pullUpViewSetMode_FULL() 
      return; 
     } 
} 
//the rest of the pan handling code, namely translating the view up and up follows here 

希望這有助於某人。

相關問題