2013-07-02 2 views
3

저는이 문제를 파악하려고 벽에서 머리를 숙였습니다. 나는 CALayer에 CATextLayer를 추가했으며, 몇 가지 작업을 수행 한 후에 CATextLayer의 텍스트를 다른 것으로 변경하려고합니다. 그렇게 할 수있는 간단한 방법이 있습니까? 아래 코드는 작동하지 않는 것 같습니다.CATextLayer의 텍스트를 동적으로 변경합니다.

self.searchingForTextLayer = [CATextLayer layer]; 
    self.searchingForTextLayer.bounds = CGRectMake(0.0f, 0.0f, 100.0f, 30.0f); 
    self.searchingForTextLayer.string = @"Searching for.."; 
    self.searchingForTextLayer.fontSize = 12; 
    //TextLayer.font = [UIFont boldSystemFontOfSize:18].fontName; 
    self.searchingForTextLayer.backgroundColor = [UIColor clearColor].CGColor; 
    self.searchingForTextLayer.position = CGPointMake(80.0, 40.0f); 
    self.searchingForTextLayer.wrapped = NO; 
    [self.captureVideoPreviewLayer addSublayer:self.searchingForTextLayer]; 

나중에 내가하는 방법

self.searchingForTextLayer.string = @"Search complete"; 

이 전화를하지만,이를 호출하면 화면에 텍스트를 변경 나던.

도움이 될 것입니다.

+0

그것은 나를 위해 잘 돌아갔다. 두 개의 추가 라인이 추가되었지만 그렇게했을 것입니다. self.captureVideoPreviewLayer = [CATextLayer layer]; [self.captureVideoPreviewLayer addSublayer : self.searchingForTextLayer]; [[self.view layer] addSublayer : self.captureVideoPreviewLayer]; – ratul

+0

그래 그 부분은 내가 이미 하위 레이어로 추가 한 후에 텍스트를 변경하려고 할 때 작동하지 않습니다. – user1179321

+0

모두 괜찮습니다. 텍스트를 변경하기 전에 'self.searchingForTextLayer'가 올바른 레이어를 가리키고 있는지 확인하십시오. – ratul

답변

1

주 스레드의 문자열 속성을 변경하고 애니메이션을 사용 중지해야합니다. 이것은 나를 위해 일했다 (신속한) :

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       CATransaction.begin() 
       CATransaction.setDisableActions(true) 
       self.textLayer?.string = text 
       CATransaction.commit() 
      }) 
관련 문제