为了更新进度视图,我需要一次计算CABasicAnimation的进度。
当进度是线性的时,我只计算每次经过的时间(多亏了https://stackoverflow.com/a/20993376/2268168)。
问题是,动画不是线性的,速度是可变的。
加速
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;我做错什么了吗?
谢谢你的帮忙!
发布于 2015-11-01 19:41:05
感谢@danh告诉我这个答案,Core animation progress callback。
这对我有帮助。
我添加了子类CALayer,它的动画方式与我的图层一样(以相同的速度变化)。这样,我就可以得到主要动画的进展。
https://stackoverflow.com/questions/33463551
复制相似问题