我有几个CALayers
我试图动画一个新的zPosition
,每个层稍微延迟与其他层.
每个动画应该花费0.25秒并在上一个动画开始后0.05秒开始.在每个动画结束时,图层将从图层树中删除.
我已成功使用-animationDidStop:finished:
委托方法删除我们的图层,但我无法正确订购动画.
是否可以以这种方式安排动画,以及如何安排?
我还是想听听别人的建议,但我想我已经解决了这个问题.
我现在正在创建特定CAAnimation
对象并指定其beginTime
属性.我之前正在做这件事并且它不起作用,我最终意识到,为了beginTime
尊重这个属性,必须将动画添加到一个CAAnimationGroup
.
所以,我的代码看起来像这样:
NSArray *layers = /* layers to be animated away */ CGFloat startOffset = 0.01; for (NSInteger index = 0; index < layers.count; index++) { CALayer *layer = [layers objectAtIndex:index]; CABasicAnimation *zoomOut = [CABasicAnimation animationWithKeyPath:@"zPosition"]; zoomOut.toValue = [NSNumber numberWithDouble:400.0]; zoomOut.beginTime = index * startOffset; CAAnimationGroup *group = [CAAnimationGroup animation]; group.animations = [NSArray arrayWithObject:zoomOut]; group.delegate = self; [layer addAnimation:group forKey:@"zoomAway"]; }
我发现如果你将它的值作为QuartzCore的CACurrentMediaTime()函数返回的值的delta作为一个值,那么BeginTime属性确实可以在不将动画放入组的情况下工作.
例如 anim.beginTime = CACurrentMediaTime() + 0.05;
我希望我有代表发表评论,但是将anim.beginTime设置为CACurrentMediaTime()的原因是由其他一些文档揭示的:
AVCoreAnimationBeginTimeAtZero使用此常量将CoreAnimation的动画beginTime属性设置为时间0.常量是一个小的非零正值,可防止CoreAnimation用CACurrentMediaTime替换0.0.适用于iOS 4.0及更高版本.在AVAnimation.h中声明.
因此,将beginTime正常设置为0是将其设置为CACurrentMediaTime()的简写.所以你可以使用它来错开各组的开始.