[英]Swift - PanGesture Recognizer - move with object - speed of movement
我在Swift for iOS中使用PanGesture Recognizer。 在动作方法里面,我正在调用第三方方法,它采取移动方向和速度。 由此,它计算对象的位置:
objectPos += normalize(move) * speed
问题是,如果我将手指放在某个物体上并用手指移动,物体就不会在我手指下的同一位置。 它开始变慢/变速。 移动方向没问题。 问题在于加速/减速 - 如果我移动得更快,物体移动得更快。
在手势回调中,我尝试过:
let move = recognizer.translation(in: self.view);
let speed = sqrt((move.x * move.x) + (move.y * move.y));
和
let move = recognizer.velocity(in: self.view);
let speed = dt * sqrt((move.x * move.x) + (move.y * move.y));
通常dt = 1.0 / 60.0
。 这是手势回调刷新率(在代码中,我使用CFAbsoluteTimeGetCurrent()
差异手动计算dt)。 如果没有这个,如果我直接使用速度计算速度,运动速度太快。
我试图通过减去当前和最后的位置手动计算差异,但仍然没有运气。
我也试图根据当前视图的宽度和高度“改变速度”,但是如果工作则没有。 我可能错过了什么,但不知道是什么。
如果您在用户停止触摸对象时根据加速度计算对象的移动会更容易。
只要用户将手指放在对象上,就可以更轻松地将对象的位置设置为从平移手势识别器获得的位置。
好的......我发现了问题。 通过角[0,0] - [1,1]将其移动到屏幕标准化坐标中。 因此,Y轴(高度)的移动是正确的,但在X轴(宽度)中,速度约为一半。
以正确的宽高比乘以move.x解决了这个问题。 基本上,X轴的移动是手动放大的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.