setDuration влияет только на один CALayer при анимации нескольких CALayers

#ios #core-animation #calayer

#iOS #ядро-анимация #calayer

Вопрос:

Я пытаюсь анимировать изменение положения для нескольких CALayers одновременно. Неявная анимация, похоже, работает нормально, но если я попытаюсь явно указать значение для свойств длительности каждого CALayer, анимируется только один, в то время как другой успешно изменяется, но без какой-либо анимации. Вот код, с которым я работаю:

 CGPoint initialPt = CGPointMake(160.0, 10);
CGPoint pt2 = CGPointMake(160.0, 185.0);
CGPoint pt3 = CGPointMake(160.0, 270.0);

CABasicAnimation *firstAnim = [CABasicAnimation animationWithKeyPath:@"postion"];
[firstAnim setFromValue:[NSValue valueWithCGPoint:initialPt]];
[firstAnim setToValue:[NSValue valueWithCGPoint:pt2]];
[firstAnim setDuration:1.0];
[layer1 setPosition:p2];
[layer1 addAnimation:firstAnim forKey:@"Slide"];

CABasicAnimation *secondAnim = [CABasicAnimation animationWithKeyPath:@"position"];
[secondAnim setFromValue:[NSValue valueWithCGPoint:initialPt]];
[secondAnim setToValue:[NSValue valueWithCGPoint:pt3]];
[secondAnim setDuration:1.0];
[layer2 setPosition:p3];
[layer2 addAnimation:secondAnim forKey:@"Slide2"];
 

Я уже пробовал использовать CATransaction, но ничего не изменилось. Если я закомментирую метод setDuration, оба слоя анимируют изменение положения без проблем, за исключением того, что они имеют фиксированную продолжительность. Похоже, что по какой-то причине настройка анимации явно все запутывает, но я не понимаю, почему. Любая помощь будет очень признательна! Спасибо.

Комментарии:

1. Почему прикрепленный код имеет ошибку компиляции? Разве вы не копируете код из своего xcode?

2. @Danyun Извини за это! Я изменил пару вещей просто для краткости.

Ответ №1:

Проблема в том, что вы вводите неправильное слово!

 CABasicAnimation *firstAnim = [CABasicAnimation animationWithKeyPath:@"postion"]; change the 'postion' to 'position'
 

должно быть

 CABasicAnimation *firstAnim = [CABasicAnimation animationWithKeyPath:@"position"]; change the 'postion' to 'position'
 

‘position’ в положение

Комментарии:

1. Вау .. я не могу поверить, что это была проблема. Теперь это работает. По какой-то причине Xcode не выдал мне ошибку компиляции с неправильным указанием этого ключевого пути. Спасибо @Danyun.