首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忽略CAReplicatorLayer的instanceDelay

忽略CAReplicatorLayer的instanceDelay
EN

Stack Overflow用户
提问于 2015-05-27 15:09:06
回答 2查看 440关注 0票数 1

我正在尝试创建多个“卡片”,然后使用以下代码将它们动画化:

代码语言:javascript
复制
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方法中有这段代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-27 18:30:02

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

代码语言:javascript
复制
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),使用添加动画的键在底层使用-just调用-removeAnimationForKey:

票数 2
EN

Stack Overflow用户

发布于 2018-02-16 11:58:40

您还必须确保在复制器层的子层上设置动画,而不是在复制器层本身上设置动画!在三年没有和CAReplicatorLayer一起工作之后,我被狠狠地咬了一口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30486406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档