是否可以控制 CAAnimation 的时间线?

Posted

技术标签:

【中文标题】是否可以控制 CAAnimation 的时间线?【英文标题】:Is it possible to control a CAAnimation's timeline? 【发布时间】:2011-10-25 06:59:41 【问题描述】:

我有一个复杂的动画,它通常单独运行,由某个CAMediaTimingFunction 驱动。这很好用。

现在,我想使用外部值控制同一动画的时间(线),例如来自滑块或手势识别器。换句话说,我不想让“时钟”驱动时间轴,而是一个滑块,因此可以用它来回滑动并通过将滑块设置为某个值来“冻结”动画。

这可能吗?如果有,怎么做?

【问题讨论】:

【参考方案1】:

这是可能的(而且非常简单),但我只是将其作为一个实验进行了尝试(对于由捏合手势识别器驱动的复杂动画),所以我很想知道这个解决方案是否足够:

您需要将动画的速度设置为 0,并将时间偏移设置为您要跳转到的时间点,例如

CABasicAnimation* animation = [CABasicAnimation ...];
animation.speed = 0;
animation.duration = 1;
animation.timeOffset = 0.5;

将使动画跳转到半秒后的位置。

现在,您无法在 CAAnimation 对象添加到图层后对其进行操作,因此您需要在每次偏移更改时添加新动画(并删除旧动画,不要忘记;) .

【讨论】:

以上是关于是否可以控制 CAAnimation 的时间线?的主要内容,如果未能解决你的问题,请参考以下文章

CAAnimation - 显示/隐藏持续时间为 0

未在委托上调用 CAAnimation 委托方法

带有 timeOffSet 的 CAAnimation

核心动画 CAAnimation 进阶

如何在没有navigationController的viewController中制作CAAnimation

CAAnimation