2012-06-14 5 views
5

У меня есть приложение, которое позволяет пользователю записывать видео в изменяемой композиции. Я хотел бы установить текст, который появится, а затем изменится с интервалом, который я установил, когда пользователь воспроизведет его после экспорта.Создайте CATextlayer, который изменяется с интервалом в AVMutableVideoComposition

Например, если первое слово «собака», то я хотел бы настроить его так, чтобы «cat» заменяет эту строку X секунд спустя, а затем заменяется другим словом через X секунд.

Мое видео экспортируется из AVMutableComposition, используя AVExportSession и мои слова будут добавлены с помощью CATextlayer добавил к нему так:

//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 
... 

Мой вопрос: как я могу внести изменения текста в в интервале что я задал строки, которые я обозначил?

Любые предложения были бы весьма полезными.

+0

Пошлите мне помощь? понял ответ? –

ответ

0

Если вы пытаетесь добиться изменения текста CATextLayer во время выполнения с интервалом, то один из ваших вариантов - это поиск этого уровня в иерархии и изменение его текста на каком-то потоке таймера. При условии, что массив строк будет заменен, вы можете установить текст слоя, как только сможете найти его во время выполнения.

Вы можете направиться начать с решения вашей первой задачи под рукой: Искать слой в иерархии

Все подклассы CALayer определяет свойство для идентификации слоя в иерархии, которая name.

Итак, что вы можете сделать, вы можете дать name своим CATextLayer. В вас футляром ваш titleLayer:

titleLayer.name = "changingTextLayer" 

, то вы можете найти его в иерархии:

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

и как только вы найдете его, вы можете изменить текст:

titleLayer.string = @"Changed text"; 

все, что вы теперь нужно настроить таймер и делать это каждую секунду/ваш запрошенный интервал времени, пока в массиве не появятся строки.

Вам необходимо бросить это CALayer на номер CATextLayer.

Удачи.

 Смежные вопросы

  • Нет связанных вопросов^_^