Объединение в цепочку Базовых анимаций Анимации

Который является самым изящным и модульным способом объединить анимацию в цепочку в Базовом контексте Анимации?

Я означаю делать анимации, который запускается как раз в то самое время, когда другой законченный (например, изменяясь position и затем opacity).. нормальный подход должен непосредственно изменить свойства:

layer.position = new_point;
layer.opacity = 0.0f;

но это сделает их одновременно. Я хочу сделать, каждый ожидает другого.

И что относительно того, чтобы объединить анимации в цепочку для различных объектов? Я читал о CATransaction используемый как:

[CATransaction begin]
layer1.property = new_property;
[CATransaction begin]
layer2.property2 = new_property2;
[CATransaction commit];
[CATransaction commit];

но это, кажется, не работает..

34
задан Roman C 17 March 2016 в 21:20
поделиться

2 ответа

Вы также можете использовать группировку анимации и использовать поле beginTime анимации. Попробуйте что-то вроде этого:

CABasicAnimation *posAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
[posAnimation setFromValue:[NSNumber numberWithFloat:0.0]];
[posAnimation setToValue:[NSNumber numberWithFloat:1.0]];
// Here's the important part
[posAnimation setDuration:10.0];
[posAnimation setBeginTime:0.0];

CABasicAnimation *borderWidthAnimation = [CABasicAnimation animationWithKeyPath:@"borderWidth"];
[borderWidthAnimation setFromValue:[NSNumber numberWithFloat:0.0]];
[borderWidthAnimation setToValue:[NSNumber numberWithFloat:1.0]];
// Here's the important part
[borderWidthAnimation setDuration:10.0];
[borderWidthAnimation setBeginTime:5.0];

CAAnimationGroup *group = [CAAnimationGroup animation];
[group setDuration:10.0];
[group setAnimations:[NSArray arrayWithObjects:posAnimation, borderWidthAnimation, nil]];

[layer addAnimation:group forKey:nil];

Обратите внимание, что продолжительность всей анимации составляет 10 секунд. Первый начинается со второго 0, а второй - через 5 секунд.

76
ответ дан 27 November 2019 в 16:23
поделиться

Я не верю, что вы можете "вкладывать" анимации CA, как в вашем примере.

Вам необходимо указать делегата для анимации и поместить второй «переход» в селектор animationDidStop: finished: делегата.

Может быть, стоит взглянуть на Руководство по программированию типов и времени анимации Apple .

0
ответ дан 27 November 2019 в 16:23
поделиться