2012-08-15 65 views
2

我有一個使用CAKeyframeAnimation從空到滿的飲用水杯動畫。動畫效果非常好。如何將UILabel文本中的更改與相關動畫同步?

我需要用與玻璃的充滿度相對應的百分比來更新UILabel,即它在動畫開始時將讀取「0%」,當它結束時將讀取「100%」。

關鍵幀動畫運行5秒鐘。我沒有看到更新此標籤的好方法。我可以考慮兩種選擇:

  1. 啓動另一個線程並運行輪詢類型的循環,以處理能力爲代價更新文本。
  2. 將動畫分解爲100個部分並使用CABasicAnimation更新文本,然後繼續下一個玻璃動畫。

有沒有更好的方法來做到這一點?提前

感謝

+0

我還記得_some_ WWDC視頻中的一個或者兩個年前做了一些類似的事情,但我不記得哪一個......他們的演示應用程序做了像植物一樣的東西。希望有人記得我正在談論哪一個。 – 2012-08-15 11:36:42

+0

感謝您的幫助 - 我搜索了2011年和2010年的WWDC會議,但沒有找到關於植物的任何內容。我會繼續尋找! – 2012-08-16 07:20:51

回答

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:... 
} 
+0

謝謝!我忘記了NSTimer。我希望它能在動畫持續時間縮短的情況下起作用,文檔說它僅在每秒10-20次調用時纔可靠。但我認爲它對5秒鐘的當前使用情況會很好。 – 2012-08-15 16:21:14

+1

如果你經常更新標籤,人們將很難閱讀標籤 - 玩弄並獲得你喜歡的效果。如果你對這個答案感到滿意,如果你點擊它旁邊的支票圖標以便接受它(如果你不知道,我們可以得到一個被接受的答案的積分),這將是非常棒的。 – 2012-08-15 16:23:46

+0

我同意,並且我已經將其設置爲100ms間隔,其中代碼根據經過時間確定當前百分比,而不是根據NSTimer預定選擇器的呼叫數量,因此它對間隙或快速呼叫不是很敏感。它看起來很好,很可能是因爲CA也在動畫大小的變化,使其更新非常順利:) – 2012-08-16 07:26:33