2011-07-19 29 views
1

我正在使用以下CABasicAnimation。但是,它非常緩慢..有沒有辦法加速它?謝謝。如何加快CABasicAnimation?

- (void)spinLayer:(CALayer *)inLayer duration:(CFTimeInterval)inDuration 
direction:(int)direction 
{ 
CABasicAnimation* rotationAnimation; 

// Rotate about the z axis 
rotationAnimation = 
[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 

// Rotate 360 degress, in direction specified 
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 * direction]; 

// Perform the rotation over this many seconds 
rotationAnimation.duration = inDuration; 

// Set the pacing of the animation 
rotationAnimation.timingFunction = 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 

// Add animation to the layer and make it so 
[inLayer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
    } 
+3

你有沒有試過給它一個較小的持續時間?或者你想知道幀率? –

+0

@Yann:謝謝你的工作。但是,如果我想要更長的持續時間,我該怎麼做?我現在用了10秒,但是我需要80秒左右的動畫....有什麼幫助嗎? – Ahsan

+0

然後給它80秒的持續時間...... –

回答

4

通過在動畫上設置repeatCount屬性,核心動畫動畫可以重複多次。

所以如果你想要一個動畫運行總共80秒,你需要弄清楚動畫的一次傳遞的持續時間 - 可能是該層的一次完整旋轉 - 然後將持續時間設置爲那個價值。然後讓動畫重複幾次完全旋轉來填充你的持續時間。

因此,像這樣:

rotationAnimation.repeatCount = 8.0; 

或者,您可以使用repeatDuration達到類似的效果:

rotationAnimation.repeatDuration = 80.0; 

在這兩種情況下,你需要將時間設置爲一個時間單旋轉,然後使用其中一種方法重複。如果您設置了兩個屬性,則行爲是未定義的。您可以查看有關CAMediaTiming here的文檔。

+0

像一個魅力, 謝謝 :) – Ahsan