Swift - PanGesture 识别器 - 随物体移动 - 移动速度

Swift - PanGesture Recognizer - move with object - speed of movement

我在 Swift 中为 iOS 使用 PanGesture 识别器。在动作方法中,我正在调用第 3 方方法,它采用移动方向和速度。由此,它计算出对象的位置:

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)。如果没有这个,如果我直接用速度来计算速度,移动太快了。

我尝试通过减去当前位置和上一个位置来手动计算差异,但仍然没有成功。

我也尝试过 "change speed" 根据当前视图的宽度和高度,但 none 不可行。我可能遗漏了什么,但不知道是什么。

如果您只是根据用户停止触摸对象时的加速度计算对象的移动,会更容易。

只要用户将手指放在对象上,只需将对象的位置设置为您从平移手势识别器获得的位置即可。

好的...我找到问题了。对象在屏幕中的移动归一化坐标为 [0,0] - [1,1]。所以 Y 轴(高度)的移动是正确的,但 X 轴(宽度)的速度大约是一半。

乘 move.x 与正确的纵横比解决了问题。基本上,X轴的移动是手动放大的。