CAReplicatorLayer 的 instanceDelay 被忽略
CAReplicatorLayer's instanceDelay ignored
我正在尝试创建多个 "cards" 以在之后使用此代码为它们制作动画:
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
方法中有这段代码。
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:
使用您添加动画的键图层。
您还必须确保将动画设置在复制器层的子层上,而不是复制器层本身!在 3 年没有再次与 CAReplicatorLayer
合作后,让我很难受。
我正在尝试创建多个 "cards" 以在之后使用此代码为它们制作动画:
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
方法中有这段代码。
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:
使用您添加动画的键图层。
您还必须确保将动画设置在复制器层的子层上,而不是复制器层本身!在 3 年没有再次与 CAReplicatorLayer
合作后,让我很难受。