如何加快CABasicAnimation?

时间:2011-07-19 17:08:33

标签: ios 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"];
  }

1 个答案:

答案 0 :(得分:4)

通过在动画上设置repeatCount属性,核心动画动画可以重复多次。

因此,如果您希望动画运行总共80秒,则需要计算动画一次传递的持续时间 - 也许是该图层的一次完整旋转 - 然后将持续时间设置为值。然后让动画重复几次完全旋转以填充你的持续时间。

这样的事情:

rotationAnimation.repeatCount = 8.0;

或者,您可以使用repeatDuration来实现类似的效果:

rotationAnimation.repeatDuration = 80.0;

在任何一种情况下,您都需要将持续时间设置为单次旋转的时间,然后使用其中一种方法重复它。如果设置这两个属性,则行为未定义。您可以查看有关CAMediaTiming here的文档。