我正在使用以下代码为CALayer的opacity属性设置动画:
在方法中创建动画:
+ (CABasicAnimation *)fadeIn:(float)begin duration:(float)duration remove:(BOOL)remove{
CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeAnimation.toValue = [NSNumber numberWithFloat:1.0];
fadeAnimation.additive = NO;
fadeAnimation.removedOnCompletion = remove;
fadeAnimation.beginTime = begin;
fadeAnimation.duration = duration;
fadeAnimation.fillMode = kCAFillModeBoth;
return fadeAnimation;
}
将动画添加到图层:
[overlayLayer addAnimation:[VideoComposerHelpers fadeIn:1.0 duration:0.5 remove:NO] forKey:nil];
这是完美的。但是,现在我想在第一个动画完成后立即向同一个图层添加另一个动画。
[overlayLayer addAnimation:[VideoComposerHelpers fadeOut:1.5 duration:0.5 remove:NO] forKey:nil]; // fadeOut is a method similar to fadeIn
应该发生的是,图层以0.5的持续时间淡入,之后,它会以0.5的持续时间淡出。 但这似乎不起作用。是因为第二个动画的起点与第一个动画的终点相同吗?
答案 0 :(得分:6)
您应该使用CAAnimationGroup
这样的内容:
CABasicAnimation *fadeIn = [VideoComposerHelpers fadeIn:1.0 duration:0.5 remove:NO];
CABasicAnimation *fadeOut = [VideoComposerHelpers fadeOut:1.5 duration:0.5 remove:NO];
CAAnimationGroup *group = [CAAnimationGroup animation];
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;
[group setAnimations:[NSArray arrayWithObjects:fadeIn, fadeOut, nil]];
group.duration = 2;
[overlayLayer addAnimation:group forKey:@"savingAnimation"];
此外,我不确定我是否从动画的开始,结束,持续时间得到正确的值(你应该检查它们):))。
答案 1 :(得分:1)
CABasicAnimation可以有一个委托。代表将被发送animationDidStop:finished:
。现在你可以要求链中的下一个动画了。
但是,在你的情况下,你根本不需要那个;只需使用autoreverses
为YES的动画。
(哦,并且不与removedOnCompletion
和fillMode
混乱;这是错误的,使用它们的例子同样错误。它们仅在中间需要复杂的分组动画。)