相关疑难解决方法(0)

如何使用Core Animation创建自定义缓动功能?

我在iOS中很好地CALayer使用CGPath(QuadCurve)动画.但是我想使用一个比Apple 提供的更有趣的缓动功能(EaseIn/EaseOut等).例如,弹跳或弹性功能.

这些东西可以与MediaTimingFunction(bezier)一起使用:

在此输入图像描述

但我想创建更复杂的计时功能.问题是媒体时间似乎需要一个立方贝塞尔,它不足以产生这些效果:

http://wiki.sparrow-framework.org/_media/manual/transitions.png

代码创建上面是很简单的在其他框架中,这使得这个非常令人沮丧.请注意,曲线是将输入时间映射到输出时间(Tt曲线)而不是时间 - 位置曲线.例如,easeOutBounce(T)= t返回一个新的t.然后该t用于绘制运动(或任何我们应该动画的属性).

所以,我想创建一个复杂的自定义,CAMediaTimingFunction但我不知道如何做到这一点,或者甚至可能吗?还有其他选择吗?

编辑:

这是步骤的具体示例.很有教育意义

  1. 我想沿着从a点到b点的直线设置对象的动画,但我希望它使用上面的easeOutBounce曲线沿着直线"反弹"它的移动.这意味着它将遵循从ab的精确线,但是将以比使用当前基于bezier的CAMediaTimingFunction更复杂的方式加速和减速.

  2. 让我们使用CGPath指定任意曲线移动.它应该仍然沿着该曲线移动,但它应该以与线示例中相同的方式加速和减速.

从理论上讲,我认为它应该像这样工作:

让我们将运动曲线描述为关键帧动画移动(t)= p,其中t是时间[0..1],p是在时间t计算的位置.因此,move(0)返回曲线开始处的位置,移动(0.5)精确中间并移动(1)结束.使用定时功能时间(T)= t来提供移动t值应该给我想要的东西.对于弹跳效果,定时功能应该返回相同的时间(0.8)时间(0.8)的t值(仅作为示例).只需更换计时功能即可获得不同的效果.

(是的,可以通过创建和连接来回的四个线段进行线条弹跳,但这不是必需的.毕竟,它只是一个简单的线性函数,它将时间值映射到位置.)

我希望我在这里有意义.

iphone cocoa-touch core-animation tween

111
推荐指数
4
解决办法
5万
查看次数

标签 统计

cocoa-touch ×1

core-animation ×1

iphone ×1

tween ×1