我通过执行以下操作成功实现了我的滚动算法:当用户释放手指时,我保存当前速度,然后,每一帧,我应用以下摩擦公式speed *= pow(friction, dt)
,其中摩擦是0到1之间的值,dt
是自上一帧以来的时间。然后,当它足够接近零时,我会停止更新。
但是,我想知道当手指被释放时滚动将在哪里结束,因为我想调整它以使滚动最终以项目为中心。
它非常类似于UIScrollView的scrollViewWillEndDragging函数(scrollView:withVelocity:targetContentOffset :)
总结一下,我正在寻找一个公式,将初始速度转换为总增量运动,并将反向公式增量运动转换为速度。
答案 0 :(得分:1)
似乎您的速度由公式
描述V = V0 * Exp(- k * t)
(确保显示时刻0,dt,2dt,3dt的速度)
其中V0是起始速度,k是摩擦系数(取决于你的friction
)
要找到距离,我们必须整合速度(link)
S = Integral[0..Infinity] (V * dt) = V0 / k