我通过执行以下操作成功地实现了我的滚动算法:当用户松开手指时,我保存当前速度,然后,每一帧,我应用以下摩擦公式 speed *= pow(friction, dt)
,其中 friction 是介于 0 和 1 之间的值,dt
是自上一帧以来的时间。当它足够接近于零时,我就会停止更新。
但是,我想知道在松开手指时滚动会结束在哪里,因为我想对其进行调整,以便滚动最终会以某个项目为中心。
和UIScrollView的函数scrollViewWillEndDragging(scrollView:withVelocity:targetContentOffset:)很相似
总而言之,我正在寻找一个公式,将初始速度转化为总增量运动,并将增量运动转化为速度的反向公式。
最佳答案
看来你的速度是用公式描述的
V = V0 * Exp(- k * t)
(为了确保,显示时刻 0、dt、2dt、3dt 的速度)
其中 V0 是起始速度,k 是摩擦系数(取决于您的摩擦
)
为了找到距离,我们必须对速度进行积分 ( link )
S = Integral[0..Infinity] (V * dt) = V0 / k
关于ios - 惯性滚动算法与帧无关 - 预测结束位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396691/