[英]CAAnimation is overriding previous CAAnimation animation
我有一个这样的场景:
发生的情况是该图层立即获得第二帧(没有动画),并且在第一个动画时间过去之后,第二个动画正确完成。
这是动画创建代码:
+ (CAAnimation *)transformAnimation:(CALayer *)layer
fromFrame:(CGRect)fromFrame
toFrame:(CGRect)toFrame
fromAngle:(CGFloat)fromAngle
toAngle:(CGFloat)toAngle
anchor:(CGPoint)anchor
vertical:(BOOL)vertical
begin:(CFTimeInterval)begin
duration:(CFTimeInterval)duration {
CATransform3D fromTransform = makeTransform(layer, fromFrame, fromAngle, anchor, vertical);
CATransform3D midTransform1 = makeTransformLerp(layer, fromFrame, toFrame, fromAngle, toAngle, anchor, 0.33, vertical);
CATransform3D midTransform2 = makeTransformLerp(layer, fromFrame, toFrame, fromAngle, toAngle, anchor, 0.66, vertical);
CATransform3D toTransform = makeTransform(layer, toFrame, toAngle, anchor, vertical);
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
animation.values = @[[NSValue valueWithCATransform3D:fromTransform],
[NSValue valueWithCATransform3D:midTransform1],
[NSValue valueWithCATransform3D:midTransform2],
[NSValue valueWithCATransform3D:toTransform]
];
animation.beginTime = begin;
animation.duration = duration;
animation.fillMode = kCAFillModeBoth;
animation.calculationMode = kCAAnimationPaced;
animation.removedOnCompletion = NO;
return animation;
}
在大多数情况下进行编辑 ,此代码效果很好,并且动画的顺序正确。 但是,如果我将1个变换动画设置为在2秒后开始,然后将另一个变换设置为在4秒后开始。 第一个变换立即应用于该图层,第二个动画从此处开始。
知道如何将动画分开一个接一个地运行吗? (我更喜欢不使用完成块)
谢谢
最简单,最明显的早期修复方法是更改填充模式,以使第二个动画的两端都不会被钳位,从而覆盖了先前的动画。
animation.fillMode = kCAFillModeForwards;
我也将开始时间调整为
animation.beginTime = CACurrentMediaTime() + begin;
如果是开始时间和持续时间重叠的问题,那么请告诉我,我也可以提供。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.