我正在使用以下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"];
}
答案 0 :(得分:4)
通过在动画上设置repeatCount属性,核心动画动画可以重复多次。
因此,如果您希望动画运行总共80秒,则需要计算动画一次传递的持续时间 - 也许是该图层的一次完整旋转 - 然后将持续时间设置为值。然后让动画重复几次完全旋转以填充你的持续时间。
这样的事情:
rotationAnimation.repeatCount = 8.0;
或者,您可以使用repeatDuration来实现类似的效果:
rotationAnimation.repeatDuration = 80.0;
在任何一种情况下,您都需要将持续时间设置为单次旋转的时间,然后使用其中一种方法重复它。如果设置这两个属性,则行为未定义。您可以查看有关CAMediaTiming here的文档。