13

我只是从一个愚蠢的while循环(触发drawRect:x次)重写了一个相当大的动画,这是我无法弄清楚的最后一件事..

如何获取动画的当前经过时间?我知道如何获取当前的 CFTimeInterval (有没有办法暂停 CABasicAnimation?):

CFTimeInterval currentTime = [self.multiplierLayer convertTime:CACurrentMediaTime() fromLayer:nil];

但是如何使用它来计算从动画开始的那一刻起的当前经过时间?beginTime 似乎总是 0.0,我是否必须设置动画开始的那一刻,然后从 beginTime 中提取 currentTime?

对不起,如果我忽略了一些简单的事情,我昨天才开始使用 Core Animation。:)

编辑: 设置 beginTime不是这样做的方法,在这里真的很茫然。

4

1 回答 1

9

一种可能更简单的方法是在创建 CABasicAnimation 时明确设置开始时间,例如:

basicAnimation.beginTime = CACurrentMediaTime();

稍后您可以计算出经过了多少时间:

CFTimeInterval elapsedTime = CACurrentMediaTime() - basicAnimation.beginTime;

并通过以下方式获得百分比:

progress = elapsedTime / basicAnimation.duration;

(如果你有 timeOffset 或类似的东西,代码会稍微复杂一些。)

于 2014-01-08T10:48:04.713 回答