2009-06-27 37 views
1

當我使用GLUT時,我可以提供一個回調函數,每幀調用一次以生成或設置幀內容的動畫。在Cocoa中每幀繪製一次

我該如何對可可做同樣的事情?

我明白那裏是setNeedsDisplay,但我不知道如何避免每幀調用一次以上。我需要的是一個事件或其他回調,告訴我何時繪製另一個框架。

回答

3

Cocoa中的所有內容都被緩衝了,因此您可以移動,動畫和調整視圖而無需重新繪製它們。如果您需要反覆重繪視圖(例如,重複調用drawRect:並創建您自己的動畫),您需要創建一個計時器,每秒鐘觸發一次,並觸發刷新視圖。

您可以創建這樣一個計時器:

[NSTimer scheduledTimerWithTimeInterval:1.0/20.0 target:self selector:@selector(animate) userInfo:nil repeats:YES]; 

你的回調函數(在這種情況下,「動畫」)是這樣的。如果你的動畫需要商業邏輯,你應該把它放在這裏。不過,所有繪圖都需要在視圖的drawRect函數中完成。

- (void)animate { 
    [animatedView setNeedsDisplay: YES]; 
} 

每幀調用setNeedsDisplay不止一次是安全的。 SetNeedsDisplay在視圖上設置一個標誌,並不實際執行任何繪圖。當您的代碼執行完畢並且應用程序返回到主運行循環時,setNeedsDisplay = YES的所有視圖都將重繪。

希望有幫助!

+0

你怎麼知道1/20秒是正確的速度? – 2009-06-27 19:09:25