Как убрать анимацию (CABasicAnimation)? - PullRequest
2 голосов
/ 16 сентября 2009

Я хочу удалить анимацию (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"];

Ответы [ 3 ]

9 голосов
/ 18 октября 2013
[layer removeAnimationForKey:@"transform.rotation.z"];

layer.removeAnimation(forKey: "bounce")

Там также

layer.removeAllAnimations()
4 голосов
/ 10 ноября 2009

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

IE:

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

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

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

1 голос
/ 17 сентября 2009

Изменение:

animation.toValue = [NSNumber numberWithFloat:5];

до

animation.toValue = [NSNumber numberWithFloat:3];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...