2012-06-14 12 views
5

Tengo una aplicación que permite a un usuario grabar un video en una composición mutable. Me gustaría establecer un texto que aparecerá y luego cambiar en un intervalo que establezco cuando el usuario lo reproduce después de una exportación.Crear un CATextlayer que cambie en un intervalo en una composición de video AVMutable

Por ejemplo, si la primera palabra es "perro", me gustaría configurarla para que "gato" reemplace esa cadena X segundos más tarde, y luego se reemplaza con otra palabra X segundos más tarde.

Mi video se exporta desde una AVMutableComposition usando AVExportSession y mis palabras se añadirá utilizando un CATextlayer añadido a la misma, así:

//code to setup AVMutableComposition 
... 
//code to setup CATextLayer and AVMutableVideoComposition 
    CALayer *animatedTitleLayer = [CALayer layer]; 
    CATextLayer *titleLayer = [[CATextLayer alloc] init]; 
    titleLayer.string = @"Text I want to change at an interval"; 
    titleLayer.alignmentMode = kCAAlignmentCenter; 
    titleLayer.bounds = CGRectMake(150, 50, 124, 354); 
    titleLayer.position = CGPointMake(120, 270); 
    titleLayer.bounds = CGRectIntegral(CGRectMake(0, 0, 250, 150)); 
    titleLayer.opacity = 1; 
    titleLayer.backgroundColor = [UIColor purpleColor].CGColor; 
    [animatedTitleLayer addSublayer:titleLayer]; 
    animatedTitleLayer.position = CGPointMake(40, 5);   
    CALayer *parentLayer = [CALayer layer]; 
    CALayer *videoLayer = [CALayer layer]; 
    parentLayer.frame = CGRectMake(0, 0, 320, 480); 
    videoLayer.frame = CGRectMake(0, 0, 320, 480); 
    [parentLayer addSublayer:videoLayer]; 
    [parentLayer addSublayer:animatedTitleLayer]; 
    parentLayer.preferredTransform = rotationTransform; 
    AVMutableVideoComposition *videoComposition; 
    videoComposition = [AVMutableVideoComposition videoComposition]; 
    videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer]; 

//code to setup AVExportSession 
... 

Mi pregunta es: ¿Cómo puedo hacer el cambio de texto a un intervalo que configuro las cadenas que designo?

Cualquier sugerencia sería muy apreciada.

+0

¿Tienes alguna ayuda? descubrió la respuesta? –

Respuesta

0

Si lo que intenta lograr es cambiar el texto de CATextLayer en tiempo de ejecución con un intervalo, una de las opciones es buscar esa capa en la jerarquía y cambiar su texto en algún tipo de subproceso de temporizador. Siempre que haya una serie de cadenas para reemplazar, puede establecer el texto de la capa una vez que la encuentre en tiempo de ejecución.

Puede ventaja con la solución de su primer problema que nos ocupa: Buscar la capa en la jerarquía

Todas las subclases de CALayer define una propiedad para la identificación de la capa en la jerarquía que es name.

Entonces, lo que puede hacer es dar name a su CATextLayer. En le caso su su titleLayer:

titleLayer.name = "changingTextLayer" 

Ahora tiene que buscar en la jerarquía:

for (CALayer *layer in [superLayerOfMyLayer sublayers]) { 
     if ([[layer name] isEqualToString:"changingTextLayer"]) { 
      return layer; 
     } 
    } 

y una vez que encuentre que usted puede cambiar el texto:

titleLayer.string = @"Changed text"; 

todo lo lo que tengo que hacer ahora es configurar un temporizador y hacer esto cada segundo/intervalo de tiempo ofrecido, hasta que haya cadenas en la matriz.

Deberás convertir ese CALayer en CATextLayer.

Buena suerte.

Cuestiones relacionadas