我在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 :(得分:0)
好的......我发现了问题。通过角[0,0] - [1,1]将其移动到屏幕标准化坐标中。所以Y轴(高度)的移动是正确的,但是在X轴(宽度)上,速度大约是一半。
以正确的宽高比乘以move.x解决了这个问题。基本上,X轴的移动是手动放大的。