我在iOS中很好地沿着CGPath (QuadCurve)制作CALayer 。 但是我想使用一个比苹果公司提供的less数有趣的缓动function(EaseIn / EaseOut等)。 例如,弹跳或弹性function。 MediaTimingFunction(bezier)可以做这些事情: 但是我想创build更复杂的定时function 。 问题是媒体时机似乎需要一个立方贝塞尔,这是不够强大的创造这些效果: ../_media/manual/transitions.png 在其他框架中创build上述代码很简单,这使得这非常令人沮丧。 请注意,曲线将input时间映射到输出时间(Tt曲线),而不是时间 – 位置曲线。 例如, easeOutBounce(T)= t返回一个新的t 。 那么这个t被用来绘制运动(或者我们应该animation的任何属性)。 所以,我想创build一个复杂的自定义CAMediaTimingFunction但我不知道该怎么做,或者甚至有可能? 有没有其他的select? 编辑: 以下是步骤的具体示例。 非常教育:) 我想要从a点到b点的一条线上创build一个对象的animation,但是我希望它使用上面的easeOutBounce曲线沿着线“反弹”它的运动。 这意味着它将遵循从a到b的确切的线,但是将以比当前基于bezier的CAMediaTimingFunction更加复杂的方式进行加速和减速。 让我们用CGPath指定任意曲线运动。 它仍然应该沿着这条曲线移动,但是它应该像在示例中那样加速和减速。 理论上我认为它应该像这样工作: 让我们将运动曲线描述为关键帧animation移动(t)= p ,其中t是时间[0..1], p是在时间t计算的位置。 所以移动(0)返回曲线起点处的位置, 移动(0.5)正确的中间点,结束移动(1) 。 使用定时函数time(T)= t来提供移动的t值应该给我我想要的。 对于弹跳效果,定时函数应该返回时间(0.8)和时间(0.8)相同的t值(只是一个例子)。 只需更换计时function即可获得不同的效果。 (是的,可以通过创build和连接四个线段来进行线反弹,但这不是必须的,毕竟这只是一个简单的线性函数,它将时间值映射到位置)。 我希望我在这里有道理。