6
如何使用Core Animation创建自定义缓动功能?
我在iOS中很好地CALayer为CGPath(QuadCurve)设置了动画。但是我想使用比Apple 提供的少数几个有趣的缓动功能(EaseIn / EaseOut等)。例如,反弹功能或弹性功能。 这些事情可能与MediaTimingFunction(贝塞尔曲线)有关: 但是我想创建更复杂的计时功能。问题在于媒体计时似乎需要一个三次方贝塞尔曲线,而这个贝塞尔曲线不够强大,无法产生以下效果: (来源:sparrow-framework.org) 该代码创建在其他框架上面是很简单的,这使得这个非常令人沮丧。请注意,这些曲线是将输入时间映射到输出时间(Tt曲线),而不是时间位置曲线。例如,easeOutBounce(T)= t返回新的t。然后,该t用于绘制运动(或我们应设置动画的任何属性)。 因此,我想创建一个复杂的自定义,CAMediaTimingFunction但我不知道如何执行此操作,或者是否有可能?有其他选择吗? 编辑: 这是步骤的具体示例。很有教育意义:) 我想沿着从点a到b的直线为对象设置动画,但是我希望它使用上面的easeOutBounce曲线沿其直线“反弹”其运动。这意味着它将遵循从a到b的精确线,但是将比使用当前基于贝塞尔的CAMediaTimingFunction可能的方式更加复杂地加速和减速。 让该线成为CGPath指定的任意曲线移动。它仍应沿该曲线移动,但应与直线示例相同的方式加速和减速。 从理论上讲,我认为它应该像这样工作: 让我们将运动曲线描述为关键帧动画move(t)= p,其中t是时间[0..1],p是在时间t计算的位置。因此,move(0)返回曲线起点的位置,move(0.5)精确地到达中间,而move(1)结束。使用时间函数time(T)= t提供t的移动值应该给我我想要的。为了产生弹跳效果,计时功能应针对time(0.8)和time(0.8)返回相同的t值(只是一个例子)。只需替换计时功能即可获得不同的效果。 (是的,可以通过创建和连接来回移动的四个线段来进行跳动,但这不是必须的。毕竟,它只是一个简单的线性函数,将时间值映射到位置。) 我希望我在这里有意义。