相关疑难解决方法(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万
查看次数

使用自定义缓动曲线重新实现基于UIView块的动画方法

如果需要更高级的曲线,UIView基于块的动画方法中缺少自定义缓动曲线会导致Core Animation.

CAKeyframeAnimation如何使用Core Animation创建自定义缓动功能中讨论了使用Category on执行此操作的方法.

为了保持我的代码清洁和可维护,我想更进一步,重新实现UIView基于块的方法,并包含一个描述缓动曲线功能的块.结果类别UIView看起来像这样:

+ (void)animateWithDuration:(NSTimeInterval)duration easingCurveFunction:(double(^)(double))function  animations:(void (^)(void))animations;
Run Code Online (Sandbox Code Playgroud)

有没有人知道苹果如何实现基于块的动画方法?

easing-functions uiviewanimation ios

4
推荐指数
1
解决办法
1809
查看次数