同时使用平移和滑动手势识别器

问题描述:

我已经看到了我的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

如果你不能描述明确职责范围的两个手势之间的差异那么这将是很难分辨的UIGestureRecognizer怎么做。另外,如果您的手势过于相似或复杂,您的用户可能很难弄清楚如何正确地与屏幕交互。也就是说,通过检查手势的velocity,您可能能够区分“滑动”和“平移”。你应该能够玩弄UIGestureRecognizerDelegate方法,并达到你想要的效果。

+1

我猜想我正在寻找系统似乎不支持的“轻弹”手势。然而,我知道自定义手势通常都是nono,因为我试图复制谷歌地图中提供的功能(当点击一个pin时),以便为应用程序的地图部分带来熟悉的东西,我没有看到比定制更多的其他方式。 换句话说,也许滑动手势不是解决我看到的问题的解决方案。 –

+1

这篇文章可以帮助你https://*.com/questions/9898627/what-is-the-difference-between-pan-and-swipe-in​​-ios。最终,这些手势能够做任何你想做的事情,假设每个手势都有明确的区分特征。但是,您必须使用委托方法来实现该效果,并且可能需要进行很多调整。 – Navillus

+0

从你的更新中,似乎你知道你想要什么,这是一个好的第一步。 – Navillus

好吧,我已经达到了所需要的。简短的回答是我正在寻找一个“轻弹”手势,而不是一个平移手势。一般来说,它是一个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 

希望这有助于某人。