#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.