Objective c CAReplicatorLayer';s实例延迟被忽略

Objective c CAReplicatorLayer';s实例延迟被忽略,objective-c,core-animation,careplicatorlayer,Objective C,Core Animation,Careplicatorlayer,我正在尝试创建多张“卡片”,以便在以后使用以下代码对其进行动画制作: CAReplicatorLayer *cardsWrapperLayer = [CAReplicatorLayer layer]; cardsWrapperLayer.instanceCount = 4; cardsWrapperLayer.instanceDelay = 10; cardsWrapperLayer.instanceTransform = CATransform3DMakeTranslation(0, pho

我正在尝试创建多张“卡片”,以便在以后使用以下代码对其进行动画制作:

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
。我在
viewdide
方法中有这段代码。

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
非常重要,如果让动画自动删除自身,那么它将在第一个实例完成动画制作后立即消失,其他实例将捕捉到其最终状态。您应该在以后手动删除动画,例如当您知道动画将结束时(即动画的
持续时间
✕ 复制器层的
instanceCount
)-只需使用添加动画的关键点在基础层上调用
-removeAnimationForKey:

您还必须确保在复制器层的子层上设置动画,而不是在复制器层本身上!在3年没有再次使用
CAReplicatorLayer
之后,我又被狠狠地咬了一口