как ускорить CABasicAnimation? - PullRequest
1 голос
/ 19 июля 2011

Я использую следующую 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 Ответ

4 голосов
/ 20 июля 2011

Базовая анимация анимации может повторяться несколько раз, путем установки свойства repeatCount для анимации.

Так что, если вы хотите, чтобы анимация работала в общей сложности 80 секунд, вам необходимо выяснить,длительность одного прохода анимации - возможно, одного полного оборота этого слоя - и затем установите длительность равной этому значению.Затем позвольте анимации повторить этот полный оборот несколько раз, чтобы заполнить вашу продолжительность.

Так что-то вроде этого:

rotationAnimation.repeatCount = 8.0;

В качестве альтернативы, вы можете использовать repeatDuration для достижения аналогичного эффекта:*

rotationAnimation.repeatDuration = 80.0;

В любом случае вам нужно установить длительность на время одного вращения, а затем повторить ее, используя ОДИН из этих методов.Если вы установите оба свойства, поведение не определено.Вы можете ознакомиться с документацией по CAMediaTiming здесь .

...