1

我正在尝试使用以下代码创建多个“卡片”以对其进行动画处理:

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

4

2 回答 2

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✕复制器层的instanceCount)——只需使用添加动画时使用的键调用-removeAnimationForKey:基础层。

于 2015-05-27T18:30:02.463 回答
0

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

于 2018-02-16T11:58:40.990 回答