Когда вы применяете анимацию к слою, Core Animation создает копию слоя и анимирует свойства копии.Исходный слой называется слой модели , а копия называется уровень представления .Анимация никогда не изменяет свойства слоя модели.
Вы пытались это исправить, установив removedOnCompletion
в NO
.Вы также должны были бы установить fillMode
анимации, чтобы сделать эту работу, но это не совсем правильный способ анимировать свойство.
Правильный способ состоит в том, чтобы изменить свойство на уровне модели, а затемприменить анимацию.
// Change the model layer's property first.
circle.strokeEnd = endAngle;
// Then apply the animation.
CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
drawAnimation.duration = timeInSeconds;
drawAnimation.fromValue = [NSNumber numberWithFloat:startAngle];
drawAnimation.toValue = [NSNumber numberWithFloat:endAngle];
drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[circle addAnimation:drawAnimation forKey:@"drawCircleAnimation"];
Это объясняется в Базовые основы анимации видео из WWDC 2011 .Я настоятельно рекомендую посмотреть его.