CAAnimation, возвращаясь - PullRequest
       6

CAAnimation, возвращаясь

2 голосов
/ 17 февраля 2012

Я экспериментирую с CAAnimation и, как и многие новички, делает CAAnimation;после завершения слой возвращается в исходное состояние.

Вопрос о том, как решить эту проблему, несколько раз задавался здесь, и ответ заключается в добавлении следующего кода в CAAnimation.

animation.removedOnCompletion = NO;

Хотя это работает, но, согласно видео Apple WWDC, в котором обсуждается CAAnimation, рекомендуемое решение будет таким:использовать их?

Ответы [ 2 ]

12 голосов
/ 17 февраля 2012

Явные анимации на самом деле не изменяют атрибуты CALayer.

Они просто модифицируют presentationLayer , это то, что вы на самом деле видите. Когда анимация закончится, вы увидите CALayer точно таким же, каким он был до анимации.

Установив значение, подобное этому

// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];

вы убедитесь, что анимированные значения сохранены в модели, поэтому ваши изменения будут действовать даже после удаления анимации со слоя.

Использование removeOnCompletion = YES не является постоянным решением. Всякий раз, когда вы удаляете анимацию из слоя, он восстанавливает свое прежнее состояние.

4 голосов
/ 17 февраля 2012

Вам не нужен флаг "removeOnCompletion".

Вам нужно установить непрозрачность на новое значение и вне анимации - как ваш второй пример.«removeOnCompletion» не будет освобождать ваш объект анимации - взрывая вашу память, если у вас много анимаций.

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"];
animation.fromValue=[NSNumber numberWithFloat:0];
animation.toValue=[NSNumber numberWithFloat:1];

layer.opacity=1; // this line will make sure the opacity will stay 1 when the animation is completed
[layer addAnimation:animation forKey:@"opacity"];
...