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

Ios Swift-PanGesture识别器-随物体移动-移动速度,ios,swift,uipangesturerecognizer,Ios,Swift,Uipangesturerecognizer,我正在使用Swift中用于iOS的PanGesture识别器。在action方法中,我调用了第三方方法,它采用移动方向和速度。由此计算对象的位置: objectPos += normalize(move) * speed 问题是,如果我把手指放在某个物体上并用手指移动,物体在我手指下的位置就不一样了。它开始变慢/变快。移动方向是可以的。问题在于加速/减速-如果我移动得更快,物体移动得更快 在这方面,我尝试过: let move = recognizer.translation(in: self

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

objectPos += normalize(move) * speed
问题是,如果我把手指放在某个物体上并用手指移动,物体在我手指下的位置就不一样了。它开始变慢/变快。移动方向是可以的。问题在于加速/减速-如果我移动得更快,物体移动得更快

在这方面,我尝试过:

let move = recognizer.translation(in: self.view);
let speed = 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轴的运动是手动放大的。

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


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

我不能这样做,因为我使用的第三方库不支持它。我同意这个答案,只要用户有触摸功能,你不能发送一个值来抵消速度吗?比如将dt设置为1.0而不是1.0/60.0你使用哪个库?我不能这样做,因为我使用的第三方库不支持它。我同意这个答案,只要用户有触控,你不能发送一个值来抵消速度吗?喜欢将dt设置为1.0而不是1.0/60.0使用哪个库?
let move = recognizer.velocity(in: self.view);
let speed = dt * sqrt((move.x * move.x) + (move.y * move.y));