可变速度的 CABasicAnimation 进度

CABasicAnimation progress with variable speed

我需要在时间 T 计算 CABasicAnimation 的进度,以便更新进度视图。

当进度是线性的时候,我就简单计算一下每次经过的时间(感谢)。

问题是,动画不是线性的,速度是可变的。

加速

mylayer.timeOffset = [mylayer convertTime:CACurrentMediaTime() fromLayer:nil];
mylayer.beginTime = CACurrentMediaTime();
mylayer.speed=2;
speed = 2;

减速

mylayer.timeOffset = [mylayer convertTime:CACurrentMediaTime() fromLayer:nil];
mylayer.beginTime = CACurrentMediaTime();
mylayer.speed=0.5;
speed = 0.5;

如何在考虑变速的情况下计算动画进度?

这个我试过了,好像只有提速一次才有效

CFTimeInterval elapsedTime = (CACurrentMediaTime() - animation.beginTime);

CFTimeInterval remainingTime = (totalDuration - elapsedTime)/speed;
speed = 1;
totalDuration = remainingTime+elapsedTime;

float progress = (totalDuration-remainingTime)/totalDuration;

我是不是做错了什么?

感谢您的帮助!

感谢@danh 指出这个答案 Core animation progress callback

它帮助了我。

我添加了子类 CALayer,以与为我的层设置动画相同的方式(具有相同的速度变化)为其设置动画。这样,我就可以获得主要动画的进度。