[英]Interactive ViewController transition triggered by pinch and pan gesture recognisers simultaneously
[英]Using Pan and Swipe gesture recognisers simultaneously
我在ViewController的底部有一个视图(类似于Google Maps Bottom Sheet)。 目标是:
平移时,视图朝平移方向移动(基本上跟随手指),平移结束时,视图变为全屏显示。 到目前为止一切顺利。
添加滑动手势。 向上滑动时,视图应全屏显示。
问题是,按照定义,滑动手势是平移手势,而不是相反。 因此,除非我平移的速度非常慢,否则即使我仍在屏幕上拖动,滑动手势也会触发并且视图将变为全屏。
只是平移看起来并不像我正在寻找的那种滑动。 im描述的滑动手势仅应在用户暂时“轻拂”视图时触发。 如果他们继续平移,则平移手势应优先。
任何想法如何实现这一目标? 作为参考,您可以在android或ios上检查一下Google地图上的图钉。
如果不显示它很难描述,所以它是否有助于我非常开放地澄清事情。
更新
如果您无法用明确定义的术语来描述两个手势之间的差异,那么将很难告诉UIGestureRecognizer
如何做到。 另外,如果您的手势过于相似或过于复杂,您的用户可能会难以确定如何与屏幕进行正确交互。
话虽如此,您可以通过检查手势的速度来区分“滑动”和“摇动”。 您应该可以使用UIGestureRecognizerDelegate
方法并达到所需的效果。
好的,我已经实现了所需要的。 简短的答案是我正在寻找“轻拂”手势而不是平移手势。 通常,它是添加自定义手势的一种方法,但是当我为ios复制google maps底部表单组件时,自定义手势似乎是唯一的方法。
使用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
希望这对某人有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.