2009-09-16 3 views
2

Я хочу удалить анимацию (CABasicAnimation) до ее завершения.Как удалить анимацию (CABasicAnimation)?

Например:

В моем коде, я начинаю игольчатый анимировать из значения вращения от 0 до целевого значения 5. Как остановить анимацию, когда игла достигает значения вращения 3?

CALayer* layer = someView.layer; 
CABasicAnimation* animation; 
animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
animation.fromValue = [NSNumber numberWithFloat:0]; 
animation.toValue = [NSNumber numberWithFloat:5]; 
animation.duration = 1.0; 
animation.cumulative = YES; 
animation.repeatCount = 1; 
animation.removedOnCompletion = NO; 
animation.fillMode = kCAFillModeForwards; 
[layer addAnimation:rotationAnimation forKey:@"transform.rotation.z"]; 
+1

вы можете форматировать код, пожалуйста, – ennuikiller

+0

Это должно быть более разборчивым в настоящее время. –

+1

Обратите внимание, что эти значения 'transform.rotation.z', вероятно, не будут делать то, что вы ожидаете. 'transform.rotation.z' находится в радианах, где 2π = один круг. Таким образом, значение 5 приведет к тому, что игла будет охватывать большую часть круга, так как полный круг будет 6,28 .... Аналогично, 3 будет почти полукругом (так как ровно половина круга будет π = 3,14 ...). –

ответ

1

Изменение:

animation.toValue = [NSNumber numberWithFloat:5]; 

в

animation.toValue = [NSNumber numberWithFloat:3]; 
+0

Я предполагаю, что он означает условно остановить анимацию на 3. – willc2

3

Вы можете отслеживать текущее значение преобразования, глядя на атрибут на представительский уровень CALayer. Уровень представления содержит текущие значения mid-animation.

И.Е.:

CALayer *pLayer = [layer presentationLayer]; 
NSLog(@"Currently at %@", [pLayer valueForKeyPath:@"transform.rotation.z"]); 

Чтобы остановить анимацию на 3, я бы захватить слой, удалить анимацию 0-5, начать новую анимацию, используя fromValue из представительский уровень и toValue 3. Установка продолжительности анимации зависит от поведения анимации, но если вы хотите, чтобы анимация занимала 3/5 секунд для завершения, если она останавливается на 3, вы можете найти, насколько далеко вы находитесь в анимации, глядя на как далеко в 0-5 анимации вы, а затем вычитаете, что от 3/5 секунд, чтобы получить оставшееся время, которое вы хотите использовать.

Я узнал тонну на CoreAnimation от Маркуса Зарра на конференции «Голоса, которая имеет значение для iPhone». Я бы рекомендовал следовать его блогу и покупать его книгу!

8
[layer removeAnimationForKey:@"transform.rotation.z"]; 

layer.removeAnimation(forKey: "bounce") 

Там также

layer.removeAllAnimations() 
+0

Это прекрасный ответ, если вы хотите резкую остановку анимации. –

Смежные вопросы