2011-02-27 17 views
5

Quiero animar el cambio en el color del texto (foregroundColor) de un CATextLayer en el iPhone. De acuerdo con la documentación, la animación implícita de la propiedad no está disponible en OSX 10.6, pero no se menciona a iOS. Como resultado, he supuesto que la animación debe ser explícita para que funcione en iOS.Animación de la propiedad foregroundColor de CATextLayer

He cambiado la clase de capa de respaldo usando +(class)layerClass, y establecí un valor inicial para la propiedad en el método UIView init. El texto aparece bien, junto con todas las propiedades que he aplicado (sombra, fuente, etc.), pero la animación no tiene ningún impacto.

A continuación se muestra mi método de animación, al que llamo desde un método de observación de KVO para que la vista advierta al usuario cuando la propiedad observada ha cambiado.

-(void) animateTextChange{ 
    animation = [CABasicAnimation animationWithKeyPath:@"foregroundColor"]; 

    [animation setFromValue:[[UIColor blackColor] CGColor]]; 

    [animation setToValue:[[UIColor whiteColor] CGColor]]; 

    [animation setDuration:2.0f]; 

    [[self layer] addAnimation:animation 
         forKey:@"foregroundColor" 
]; 
} 

Gracias como siempre.

Respuesta

3

Ésta es la única manera que tuvo éxito al hacer eso:

 [CATransaction begin]; 
     [CATransaction setAnimationDuration:.5]; 
     [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
     [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
     yellowWord.foregroundColor =[UIColor redColor].CGColor; 
     [CATransaction commit]; 

esperan que ayude a alguien

+0

Estaba tan esperando que esto funcionaría, pero no funcionó para mí en iOS9 –

+0

Se * funcionó * después de que cambié la línea 'setValue: ...' para que fuera 'CATransaction.disableActions()' –

Cuestiones relacionadas