2012-08-15 4 views
2

CAKeyframeAnimation을 사용하여 빈 유리에서 가득 찬 유리 잔을 마실 수 있습니다. 애니메이션은 완벽하게 작동합니다.UILabel 텍스트의 변경 사항을 관련 애니메이션과 어떻게 동기화합니까?

UILabel을 유리가 가득 찬 비율에 맞게 업데이트해야합니다. 즉, 애니메이션이 시작될 때 '0 %'가 끝나고 '100 %'가 끝날 때 읽습니다.

키 프레임 애니메이션이 5 초 동안 실행됩니다. 이 라벨을 업데이트하는 좋은 방법이 보이지 않습니다. 나는 두 가지 옵션을 생각할 수 있습니다 :

  1. 다른 스레드를 시작하고 처리 능력의 비용으로 텍스트를 업데이트하는 폴링 형 루프를 실행.
  2. 애니메이션을 100 개 부분으로 분할하고 CABasicAnimation을 사용하여 텍스트를 업데이트 한 다음 유리 애니메이션의 다음 비트로 진행합니다.

더 좋은 방법이 있나요? 사전에

감사

+0

하나 아니면 이년 전 그 비슷한 일을했지만 어떤 것을 기억하지 못합니다 ... 데모 앱은 수생 식물과 같은 것을했습니다. 다행히 누군가 내가 말하고있는 것을 기억합니다. –

+0

도움을 주셔서 감사합니다 - 2011 년과 2010 년 WWDC 세션을 검색했지만 식물에 대해서는 찾지 못했습니다. 나는 계속 볼거야! –

답변

0
당신은 몇 가지 예약 된 간격으로 라벨을 업데이트 할 NSTImer 또는 dispatch_after() 블록을 사용할 수 있습니다

:

// assume an ivar "NSTimer *myTimer" and "int count", initially 0 

// fires 20 times, so update is 0.05 
myTimer = NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES 

- (void)updateLabel:(NSTimer *)timer 
{ 
    ++count; 
    if(count >= 20) { 
    [timer invalidate]; 
    } 
    CGFloat percent += 0.05; 
    myLabel.text = [NSString stringWithFormat:... 
} 
내가 WWDC 비디오 _some_ 기억할 수
+0

감사합니다. NSTimer에 대해 잊어 버렸습니다. 애니메이션 시간이 줄어들면 문서가 초당 10-20 회의 통화에서만 안정적이라고 말하면 좋겠다. 하지만 5 초의 현재 유스 케이스에서는 정상적으로 작동 할 것이라고 생각합니다. –

+1

너무 자주 업데이트하면 사람들이 라벨을 읽는 데 어려움을 겪습니다. 좋아하는 것을 가지고 놀고 좋아하십시오. 이 답변에 만족한다면 옆에있는 체크 아이콘을 클릭하여 받아 들일 수 있으면 좋을 것입니다 (모름이있는 경우를 대비하여 승인 된 답변에 대한 점수를 얻습니다). –

+0

동의합니다. 코드가 간격을 기준으로 현재 백분율을 결정하고 NSTimer 스케줄 선택기에 대한 호출 수가 아닌 100ms 간격으로 설정 했으므로 간격이나 빠른 호출에 매우 민감하지 않습니다 . CA가 크기 변경을 애니메이션으로 만들어 매우 원활하게 업데이트하기 때문에 잘 보입니다. :) –