我有一个带有方法的组件setPercentCompleted
,我想在 1 秒内调用 500 个点的距离。
为了做到这一点,我只需将计时器设置为某个时间间隔,并setPercentCompleted
在每次计时器触发时调用。
如何使用ease-out
曲线实现此功能?
这很像一个物理问题。
您需要以给定的“速度”和一定的“减速度”出发,以便在给定的时间(1.0 秒)内达到给定的“位移”(1.0)。
您需要确定的 2 个数字是初始速度和所需的减速度。
使用 SUVAT 并代入 s = 1 和 t = 1。
你从
s = ut + 1/2 * at^2
至
a = 2 - 2u
只要您的初始速度 (u) 和您应用的加速度 (a) 使这个等式有效,那么您将在 1 秒内达到 1 的距离。
您可以通过将数字放入电子表格来查看效果。您必须在 0 和 2 之间选择一个 u 值,这将提供在 1 秒内达到 1.0 所需的加速度。
你有你的 u 数量的起始值,然后每次加速它你的值。
事实上,在 0 和 1 之间选择 u 值会产生“缓入”效果。在 1 和 2 之间选择 u 值将产生“缓出”效果。
实现缓动函数有许多不同的方程。您可以从这个JQuery easing 插件中获得一些灵感。源代码应该足够简单,可以轻松地移植到 Objective C。