Экземпляр CAReplicatorLayer игнорируется
Я пытаюсь создать несколько "карт", чтобы оживить их потом, используя этот код:
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 ответа
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
Layer слой репликатора instanceCount
)-просто позвони -removeAnimationForKey:
на базовом слое с ключом, с которым вы добавили анимацию.
Вы также должны убедиться, что вы установили анимацию на подслой слоя репликатора, а не на сам слой репликатора! Укусил меня сильно после 3 лет не работать с CAReplicatorLayer
снова.