可变速度的 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,以与为我的层设置动画相同的方式(具有相同的速度变化)为其设置动画。这样,我就可以获得主要动画的进度。
我需要在时间 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,以与为我的层设置动画相同的方式(具有相同的速度变化)为其设置动画。这样,我就可以获得主要动画的进度。