Estoy intentando crear una CoreAnimation bastante simple para usarla en un AVComposition
. Mi objetivo es crear un CALayer
que, a través de varias subcapas, desvanece un título de entrada y salida, luego se desvanece en las imágenes de salida. Una presentación de diapositivas, básicamente. Esto se está exportando a .mov usando AVAssetWriter
.CoreAnimation - Animación de fundido de opacidad de entrada y salida no funciona
Con la ayuda de la WWDC 2011 AVEditDemo, he podido obtener un título y que aparezcan las imágenes. ¡El problema es que están todos en la pantalla al mismo tiempo!
He creado cada capa con una opacidad de 0.0. entonces he añadido un CABasicAnimation
a desvanecerse ellas de 0,0 a 1,0, usando el siguiente código:
CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
fadeInAnimation.additive = NO;
fadeInAnimation.removedOnCompletion = YES;
fadeInAnimation.beginTime = 1.0;
fadeInAnimation.duration = 1.0;
fadeInAnimation.fillMode = kCAFillModeForwards;
[titleLayer addAnimation:fadeInAnimation forKey:nil];
El problema parece ser la propiedad 'beginTime'. El "1.0" está destinado a ser un retraso, por lo que comienza 1 segundo después del comienzo de la animación. Sin embargo, está apareciendo en la pantalla de inmediato. Una animación de fundido de salida
El reverso de este código, para el fundido de salida, simplemente cambia el fromValue a 1.0 y toValue a 0.0. Tiene un tiempo de inicio de 4.0 y funciona perfectamente.
estoy usando el siguiente para crear el animatedTitleLayer
:
CATextLayer *titleLayer = [CATextLayer layer];
titleLayer.string =self.album.title;
titleLayer.font = @"Helvetica";
titleLayer.fontSize = videoSize.height/6;
titleLayer.alignmentMode = kCAAlignmentCenter;
titleLayer.bounds = CGRectMake(0, 0, videoSize.width, videoSize.height/6);
titleLayer.foregroundColor = [[UIColor redColor]CGColor];
titleLayer.opacity = 0.0;
El fundido imágenes de una animación tienen un beginTime 5 segundos de diferencia. Al igual que el título, sus animaciones de fundido funcionan bien.
Cualquier ayuda sería muy apreciada!
¡Salud!
EDITAR
Las respuestas eran útiles, pero al final he descubierto que sólo un monigote puede ser añadido a una CALayer
. La animación de fundido estaba funcionando ya que era la última añadida.
Probé un CAAnimationGroup, pero esto no funcionó ya que estaba modificando la misma ruta de valor de clave.
Así que me he dado cuenta de que un CAKeyframeAnimation
es el mejor para esto. ¡Solo que también estoy teniendo dificultades con eso! El código ahora se está desvaneciendo bien, pero no se está desvaneciendo. Probé varios fillMode, cambié la duración, etc. ¡No puedo hacer que funcione!
Aquí está mi código:
CAKeyframeAnimation *fadeInAndOut = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
fadeInAndOut.duration = 5.0;
fadeInAndOut.autoreverses = NO;
fadeInAndOut.keyTimes = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:4.0],
[NSNumber numberWithFloat:5.0], nil];
fadeInAndOut.values = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:0.0], nil];
fadeInAndOut.beginTime = 1.0;
fadeInAndOut.removedOnCompletion = NO;
fadeInAndOut.fillMode = kCAFillModeBoth;
[titleLayer addAnimation:fadeInAndOut forKey:nil];
así que ¿está tratando de tener todas las capas posicionadas y configuradas con anticipación, o puede agregarlas a medida que avanza la transición de las diapositivas? – nielsbot
Estoy posicionando y configurando antes de tiempo. Lo descubrí gracias a esta publicación: http://stackoverflow.com/questions/2184803/what-kind-of-value-is-keytime-in-an-cakeyframeanimation – gamblor87
¿Has podido exportar un CALayer al video? Estoy atrapado en eso ahora. Si tiene algún consejo, responda a mi pregunta. ¡Gracias! http://stackoverflow.com/questions/10285175/avfoundation-exporting-calayers-only –