Как повторно использовать CABasicAnimation, если он не удален после завершения? - PullRequest
7 голосов
/ 21 января 2011

Многие люди говорят о сохранении объекта CABasicAnimation после того, как он был использован.

Итак, установив

RemoveOnCompletion = NO

объект анимации остается прикрепленным к слою, когда анимация завершена. Как бы я снова запустил эту анимацию без создания новой CABasicAnimation?

Какой смысл держать этот объект рядом? Единственное известное мне преимущество состоит в том, что мы можем установить removeOnCompletion = NO и установить kCAFillModeForwards, чтобы Core Animation не возвращала визуальное представление обратно значениям модели в CALayer.

Но как повторно использовать анимацию, как все говорят?

Ответы [ 2 ]

6 голосов
/ 05 марта 2011

Попробуйте это:

  1. Добавьте анимацию с помощью клавиши, используя [layer addAnimation:myAnimation forKey:@"myKey"]

  2. Чтобы получить ссылку на него позже, звоните [layer animationForKey:@"myKey"]

  3. Прочитайте эту заметку от Apple , в которой объясняется, как приостанавливать и возобновлять (перезапускать) анимацию.

0 голосов
/ 31 августа 2016

Это сработало для меня, но я уверен, что кто-то скажет мне, что значение уже сохранено в ключе.

Когда я создал слой и назначил ему анимацию, я установил для анимации ключевое значение, связанное со слоем.

в этом примере layerCurrentAnimation - это CABasicAnimation, а myAnimatedLayer - это CALayer.

[myAnimatedLayer setValue:layersCurrentAnimation forKey:@"basicAnimation"]

тогда, если анимация должна была остановиться, я бы вытащил значение анимации из слоя и повторно запустил его

CABasicAnimation *thisAnimation = [myAnimatedLayer  valueForKey:@"basicAnimation"];

[myAnimatedLayer addAnimation:thisAnimation forKey:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...