繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM