2012-06-14 1 views
5

의 간격으로 변경하는 CATextlayer을 만듭니다. 나올 때까지 사용자가 내보낼 때마다 설정 한 간격으로 텍스트를 설정하고 싶습니다.나는 사용자가 변경 가능한 구성에서 비디오를 녹화 할 수있는 응용 프로그램을 AVMutableVideoComposition

은 첫 번째 단어는 "개"인 경우 예를 들어, 나는이 "고양이"나중에 그 문자열 X 초를 대체 있도록 설정하고 싶습니다, 다음 나중에 다른 워드 X (초)로 대체된다.

내 비디오가 AVExportSession을 사용하여 AVMutableComposition에서 내 보낸 내 말은 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 인 계층 구조에서 계층의 식별을위한 속성을 정의하는 계층 구조에서 레이어를 검색합니다.

은 그래서 당신이 할 수있는 것은 당신이 당신의 CATextLayername을 줄 수있다. 당신에 케이스는 당신의 titleLayer :

titleLayer.name = "changingTextLayer" 

당신은 계층 구조를 검색 할 수 있습니다

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

당신이 그것을 찾을 일단 당신이 텍스트를 변경할 수 있습니다

titleLayer.string = @"Changed text"; 

모두를 이제 타이머를 설정하고 배열에 문자열이있을 때까지 매초/사용자가 제안한 시간 간격을 설정해야합니다.

당신은 CATextLayer 해당 CALayer 캐스팅해야합니다.

행운을 빈다.