我只是从一个愚蠢的循环中重写了一个很大的动画(触发drawRect:x次),这是我无法弄清楚的最后一件事。
如何获取动画的当前已用时间?我知道如何获取当前的CFTimeInterval(Is there a way to pause a CABasicAnimation?):
CFTimeInterval currentTime = [self.multiplierLayer convertTime:CACurrentMediaTime() fromLayer:nil];
但是如何使用它来计算从动画开始的那一刻开始的当前经过时间?似乎beginTime始终为0.0,我必须设置动画开始的那一刻,然后从beginTime中提取currentTime吗?
我很抱歉,如果这是一件我很容易忽视的事情,我昨天才开始使用Core Animation。 :)
修改 设置beginTime是不的方式,在这里真的不知所措。
答案 0 :(得分:7)
一种可能更简单的方法来做你想要的是当你创建你的CABasicAnimation时明确设置开始时间,如:
basicAnimation.beginTime = CACurrentMediaTime();
稍后您可以通过以下方式计算出已用时间:
CFTimeInterval elapsedTime = CACurrentMediaTime() - basicAnimation.beginTime;
通过以下方式获得百分比:
progress = elapsedTime / basicAnimation.duration;
(如果您有timeOffset或类似的话,代码会稍微复杂一些。)