现代UI在移动时开始赋予其UI元素良好的惯性。选项卡滑入,页面过渡,甚至某些列表框和滚动元素对其也具有很好的惯性(例如,iphone)。最好的算法是什么?当它们加速时,不仅是重力,而当它们下落到位时,它就会减速。我尝试了各种公式来加速最大速度(最终速度),然后放慢速度,但是我没有尝试过“感觉”正确的方法。总是感觉有些不对劲。有没有为此的标准,还是只是在看起来/感觉正确之前玩各种数字?

最佳答案

您在这里谈论两件事。

一种是动量-从拖曳中释放出来时会产生残留运动。这仅仅是要记住用户释放物体时的速度,然后每帧将该速度应用于对象,并每帧降低一定速度。如何尝试降低每帧的速度是您尝试以得到正确感觉的方法。

另一件事是缓入和缓出动画。这是关于在两个位置之间移动对象时平滑地加速/减速,而不仅仅是线性插值。您可以通过使用S型函数简单地输入“时间”值,然后再使用它在两个位置之间进行插值来实现此目的。一种这样的功能是

smoothstep(t) = 3*t*t - 2*t*t*t    [0 <= t <= 1]


这使您既轻松又轻松。但是,您通常会只看到GUI中使用的缓动。也就是说,对象开始迅速移动,然后在其最终位置减速至停止。为此,您只需要使用曲线的右半部分即可。

smoothstep_eo(t) = 2*smoothstep((t+1)/2) - 1

07-24 09:01