CAReplicatorLayer的instanceDelay被忽略了

时间:2015-05-27 15:09:07

标签: objective-c core-animation careplicatorlayer

我试图制作多张卡片#34;之后使用此代码为它们设置动画:

CAReplicatorLayer *cardsWrapperLayer = [CAReplicatorLayer layer];

cardsWrapperLayer.instanceCount = 4;
cardsWrapperLayer.instanceDelay = 10;
cardsWrapperLayer.instanceTransform = CATransform3DMakeTranslation(0, phoneSize.height + self.phonePadding, 0);

[cardsWrapperLayer addSublayer:self.cardLayer];

但即使instanceDelay设置为10,它们也会同时显示。我在viewDidAppear方法中有这段代码。

2 个答案:

答案 0 :(得分:2)

instanceDelay本身不做任何事情,它只是改变每个实例的“当前时间”。要查看发生的事情,您需要添加动画,如下所示:

CABasicAnimation *fadeIn = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeIn.fromValue = @0; // if we don’t specify a toValue, it’ll animate to the layer’s current value which by default is 1
fadeIn.duration = 0.2;
fadeIn.removedOnCompletion = NO;
[self.cardLayer addAnimation:appear forKey:@"appear"];

请注意removedOnCompletion很重要 - 如果您让动画自动删除,那么第一个实例完成动画后它就会消失,其他实例将会捕捉到最终状态。您应该稍后手动删除动画,就像您知道它将结束一样(即动画的duration rep复制器层的instanceCount) - 只需在基座上调用-removeAnimationForKey:使用您添加动画的键的图层。

答案 1 :(得分:0)

您还必须确保在复制器层的子层上设置动画,而不是在复制器层本身上设置动画!经过3年没有再次使用CAReplicatorLayer后,我感到很难受。