我的ViewController底部有一个视图(类似于Google Maps Bottom Sheet)。目标是:
平移时,视图朝向摇摄方向移动(基本上跟随手指),当平移结束时,视图将全屏显示。到目前为止一切顺利,一切正常。
添加滑动手势。向上滑动时,视图应全屏显示。
问题在于,根据定义,滑动手势是平移手势,而不是相反。因此,除非我的平移速度非常慢,否则即使我仍然在屏幕上拖动,滑动手势也会触发并且视图将全屏显示。
简单地平移看起来不像我正在寻找的那种轻扫。滑动手势即时描述应该仅在用户暂时“轻弹”视图时触发。如果他们继续平移,那么平移手势应该优先。
任何想法如何实现这一目标?作为参考,您可以检查点击Android或ios上谷歌地图上的图钉。
如果没有显示它就有点难以描述,如果它有助于我非常公开地澄清事情。
更新
答案 0 :(得分:0)
如果您无法用明确定义的术语描述两种手势之间的差异,那么很难告诉UIGestureRecognizer
如何这样做。此外,如果您的手势太相似或太复杂,您的用户可能无法确定如何正确地与屏幕进行交互。
话虽如此,您可以区分"轻扫"和#34; pan"通过检查手势velocity。你应该可以使用UIGestureRecognizerDelegate
方法来实现你想要的效果。
答案 1 :(得分: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
希望这有助于某人。