Tengo la sensación de que estoy pasando por alto algo elemental, pero ¿qué mejor manera de encontrarlo que estar equivocado en Internet?Propiedades de CAGradientLayer no animadas dentro del bloque de animación UIView
Tengo una interfaz de usuario bastante básica. La vista para mi UIViewController
es una subclase cuyo +layerClass
es CAGradientLayer
. Dependiendo de las acciones del usuario, necesito mover algunos elementos de UI y cambiar los valores del degradado del fondo. El código es como la siguiente:
[UIView animateWithDuration:0.3 animations:^{
self.subview1.frame = CGRectMake(...);
self.subview2.frame = CGRectMake(...);
self.subview2.alpha = 0;
NSArray* newColors = [NSArray arrayWithObjects:
(id)firstColor.CGColor,
(id)secondColor.CGColor,
nil];
[(CAGradientLayer *)self.layer setColors:newColors];
}];
La cuestión es que los cambios que realice en este bloque a los subvistas animan bien (cosas se mueve y se desvanece), pero el cambio de colores del degradado no lo hace. Simplemente cambia.
Ahora, the documentation does say ese código de Core Animation dentro de un bloque de animación no heredará las propiedades del bloque (duración, suavizado, etc.). ¿Pero es el caso que eso no define una transacción de animación en absoluto? (La implicación de los documentos parece ser que obtendrá una animación por defecto, donde consigo ninguna.)
¿Me tengo utilizar explícita CAAnimation
para hacer este trabajo? (Y si es así, ¿por qué?)
¡Fantástico hallazgo! Nunca hubiera adivinado esto. –