Trabalhando com o CAReplicatorLayer

9

Estou tentando criar um efeito de texto legal com o CAReplicatorlayer, o CATextLayer e animações muito básicas. Estou tentando fazer com que as letras pareçam estar sendo descartadas na parte superior da tela, seguidas por replicadores legais que ficarão cada vez menos visíveis. Eu consegui fazer esse efeito, mas não completamente.

Até agora, isso é o que eu tenho:

CATextLayer *messageLayer = [CATextLayer layer];

[messageLayer setForegroundColor:[[UIColor blackColor] CGColor]];
[messageLayer setContentsScale:[[UIScreen mainScreen] scale]];
[messageLayer setFrame:CGRectMake(0, 0, 40, 40)];
[messageLayer setString:@"A"];


CAReplicatorLayer *replicatorX = [CAReplicatorLayer layer];

//Set the replicator's attributes
replicatorX.frame = CGRectMake(0, 0, 40, 40);
replicatorX.anchorPoint = CGPointMake(0,0);
replicatorX.position = CGPointMake(0, 0);
replicatorX.instanceCount = 9;
replicatorX.instanceDelay = 0.15;
replicatorX.instanceAlphaOffset = -0.1;

replicatorX.zPosition = 200;
replicatorX.anchorPointZ = -160;

[replicatorX addSublayer:messageLayer];

[self.view.layer addSublayer:replicatorX];


messageLayer.position = CGPointMake(40, 400);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
animation.fromValue = [NSNumber numberWithInt:0];;
animation.toValue = [NSNumber numberWithInt:400];
animation.duration = 3;
[messageLayer addAnimation:animation forKey:@"s"];

Eu tenho dois problemas:

  1. As camadas replicadas estão iniciando no ponto final.
  2. Quando a camada principal alcança seu último ponto animado, a animação pára e as camadas replicadas não podem terminar sua animação.
por Or Ron 28.09.2011 в 14:07
fonte

1 resposta

5

Definir os valores corretos para as propriedades fillMode e removedOnCompletion do objeto de animação resolverá seus problemas:

  

"As camadas replicadas estão iniciando no ponto final."

Isso é causado pelo valor atribuído à propriedade instanceDelay , que atrasa a animação com 0,15s no seu exemplo. Para apresentar a animação do fromValue, você precisa considerar esse atraso definindo o fillMode da animação como kCAFillModeBack.

animation.fillMode = kCAFillModeBackwards;
  

"Quando a camada principal alcança seu último ponto animado, a animação pára   e as camadas replicadas não puderam terminar sua animação ".

Isso acontece porque, por padrão, "a animação é removida das animações da camada de destino após a conclusão." 1 . Você pode substituir esse comportamento padrão definindo o atributo de animação removedOnCompletion como NO.

animation.removedOnCompletion = NO;

Espero que isso ajude. :)

    
por 0x5f3759df 06.10.2012 / 01:30
fonte