objective framework iphone cocoa macos core-animation

iphone - framework - swift ios documentation



¿Cómo se anima explícitamente un backgroundColor de un CALayer? (2)

Estaba luchando con este problema hasta que encontré experimentalmente el control de carretera. Establecer la propiedad backgroundColor de la capa, ya sea directamente o mediante la animación, no tendrá efecto si cambia el color de fondo del predeterminado (no especificado) en Interface Builder, en el contexto de un elemento (como UILabel) que es sido colocado en IB. Por lo tanto, deje el color de fondo sin especificar y lo anterior debería funcionar.

Intento construir una CABasicAnimation para animar la propiedad backgroundColor de un CALayer de Core Animation, pero no puedo encontrar la forma de ajustar correctamente un valor de CGColorRef para pasar a la animación. Por ejemplo:

CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB(); CGFloat values[4] = {1.0, 0.0, 0.0, 1.0}; CGColorRef red = CGColorCreate(rgbColorspace, values); CGColorSpaceRelease(rgbColorspace); CABasicAnimation *selectionAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; [selectionAnimation setDuration:0.5f]; [selectionAnimation setToValue:[NSValue valueWithPointer:red]]; [layer addAnimation:selectionAnimation forKey:@"selectionAnimation"];

parece que no hace nada a la propiedad backgroundColor, supongo que entregarla como un puntero envuelto en un NSValue no es la forma de pasarlo.

backgroundColor es una propiedad animable de CALayer, por lo que mi pregunta es: ¿cómo se configuran los valores From o To para esta propiedad en particular (preferiblemente en una plataforma independiente de Mac / iPhone)?


No es necesario ajustar CGColorRef s cuando se configuran las propiedades toValue o fromValue de una CABasicAnimation . Simplemente use el CGColorRef . Para evitar la advertencia del compilador, puede convertir el CGColorRef en una id .

En mi aplicación de muestra, el siguiente código animó el fondo a rojo.

CABasicAnimation* selectionAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; selectionAnimation.toValue = (id)[UIColor redColor].CGColor; [self.view.layer addAnimation:selectionAnimation forKey:@"selectionAnimation"];

Sin embargo, cuando termina la animación, el fondo vuelve al color original. Esto se debe a que CABasicAnimation solo afecta la capa de presentación de la capa de destino mientras se ejecuta la animación. Una vez que finaliza la animación, vuelve el valor establecido en la capa del modelo. Por lo tanto, tendrá que establecer las capas de backgroundColor propiedad backgroundColor en rojo también. Tal vez apague las animaciones implícitas con una CATransaction .

Podrías ahorrarte este problema usando una animación implícita en primer lugar.