2011-08-11 170 views
2

我基本上想要做的是tp以快速的速度(60 /秒)顯示一系列圖像,以創建一個序列。我要創建一個計時器,看看它是否足夠快。核心動畫動畫圖像數組

我想在我的可可應用程序中使用動畫顯示圖像數組(每秒最多60個)。

下面是我創建至今的動畫:

- (CAAnimation*)imageAnimation; 
{ 
    CGImageRef image1 = [self nsImageToCGImageRef:[NSImage imageNamed:@"1.png"]]; 
    CGImageRef image2 = [self nsImageToCGImageRef:[NSImage imageNamed:@"2.png"]]; 
    CGImageRef image3 = [self nsImageToCGImageRef:[NSImage imageNamed:@"3.png"]]; 

    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 

    NSArray *images = [NSArray arrayWithObjects:(id)image1, (id)image2, (id)image3, nil]; 

    [animation setValues:images]; 
    [animation setDuration:3.0]; 

    return animation; 
} 

其中nsImageToCGImageRef是我在其他地方所定義的方法。現在,我不知道該從哪裏開始將此動畫添加到我的視圖中。

+2

爲什麼downvotes?問題不夠清楚嗎? –

回答

2

您應該調查CVDisplayLink,它允許您在每次Mac的顯示子系統即將顯示幀時收到回調。這樣可以讓您以60fps的速度顯示圖像,而不會丟失幀,因爲API僅在需要更新時才調用您的代碼。

這意味着你不需要擔心與顯示器同步計時器,這也意味着你沒有做不必要的工作。您還可以執行諸如僅在備用回調時更新的內容,以便在您的繪圖代碼較慢時將幀速率降低至30fps。

0

那麼,首先,這個問題還不夠清楚。您可能想要重述一下,因爲該問題沒有說明您想要清楚地獲得什麼內容,也沒有說明您到目前爲止所做的代碼。

CAKeyframeAnimation用於指定動畫期間圖層屬性的值。

您正在創建具有屬性位置的關鍵幀動畫;在這種情況下,您應該在動畫過程中給出圖層的位置值。您正在嘗試更改圖像。從我的代碼中可以理解,你應該設置內容屬性而不是動畫屬性與圖像值,但你不會得到流暢的動畫。我沒有嘗試過這個,而是基於理論,它需要什麼。你的代碼是否工作?即使速度緩慢,我也不這麼認爲?請讓我知道如果將消息animationWithKeyPath的屬性名稱「position」更改爲「contents」,即使它的速度很慢,也會工作嗎?

你將需要一個紋理地圖集。看看url http://mysterycoconut.com/blog/2011/01/cag1/

這可能顯示你需要什麼,根據我可以從你的問題了解。

+0

對不起,如果問題不夠清楚。基本上我有一個序列的許多圖像,每個關鍵幀(每秒60個圖像)。我想要的是按順序顯示這些圖像,從而創建一個動畫 –

0

經過一些研究和試用,似乎最好的方法是使用計時器代替,然後使用下一個可用的圖像更改圖像。

+0

我建議您嘗試'CVDisplayLink',而不是專門爲此類任務構建的。看到我的答案。 –