我有一个这样的场景:
所发生的情况是,该层立即获得第二个帧(没有动画),并且在第一个动画时间过去后,第二个动画正确完成。
这是动画创作代码:
+ (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秒后开始。第一个变换立即应用到该层,第二个动画从那里开始。
你知道我怎么能把动画分开来一个接一个地运行吗?(我不喜欢使用完成块)
谢谢
发布于 2018-07-31 13:56:23
最简单和最明显的早期修复将是改变填充模式,以便第二个动画不会夹在两端,覆盖之前的动画。
animation.fillMode = kCAFillModeForwards;我也会调整开始的时间
animation.beginTime = CACurrentMediaTime() + begin;如果这是一个重叠的问题,开始时间和持续时间,而不是这个,让我知道,我也可以提供。
https://stackoverflow.com/questions/51580069
复制相似问题