Несколько CAAnimations одновременно в разных представлениях

Я пытаюсь выполнить несколько анимаций одновременно. Один из них переходит от одного uimageview к другому, а другой анимирует translation.x метки. Метка находится поверх uiimageview.

Но то, что я получаю, это то, что либо перевод работает нормально, и переход происходит немедленно, либо переход, основанный на скрытом свойстве, также применяется к моей метке, которая должна быть только сдвинута (она также переходит из скрытого в видимое). Я не могу использовать caanimationgroup, потому что они применяются к разным представлениям.

//CAKeyFrameAnimation для скольжения метки

...

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.x"];

NSArray *xValues = @[[NSNumber numberWithFloat:myLabel.bounds.origin.x],
                [NSNumber numberWithFloat:myLabel.bounds.origin.x + screenHalf],
                [NSNumber numberWithFloat:myLabel.bounds.origin.x + screenHalf * 4]];
[anim setValues:xValues];

NSMutableArray *timeFrames = [NSMutableArray array];

CGFloat timeStep = 1.0 / ([xValues count] - 1);

for (NSInteger i = 0; i < [xValues count]; i++)
{
    [timeFrames addObject:[NSNumber numberWithFloat:timeStep * i]];
}

[anim setKeyTimes:timeFrames];

[anim setDuration:duration];
[anim setFillMode:kCAFillModeForwards];
[anim setRemovedOnCompletion:FALSE];

[myLabel.layer addAnimation:anim forKey:nil];
...

//Переход с uiimageview на другой

...
CATransition *transition = [CATransition animation];
[transition setDuration:duration];
[transition setType:kCATransitionFade];

//These two are uiimageviews i'm switching from and to
initial.hidden = TRUE;
next.hidden = FALSE;

//Initial and next are subviews of container which itself is a subview of viewcontroller's main view
[container.layer addAnimation:transition forKey:@""]; 

Если я вызываю анимацию, как указано выше, переход происходит немедленно, и метка правильно скользит по экрану. Если я изменю последнюю строку на:

[self.view.layer addAnimation:transition forKey:@""];

Затем скрытая анимация также применяется к myLabel. Как исправить комбинирование анимаций, как указано выше, а также, более подробно, в чем причина?


person guenis    schedule 02.04.2013    source источник
comment
Вам все еще нужен ответ?   -  person kelin    schedule 22.01.2018


Ответы (1)


Я бы обернул весь код в CATransaction, чтобы сгруппировать разные CAAnimations в одну группу.

Псевдокод для использования этого с CAKeyFrameAnimation будет выглядеть так:

[CATransaction begin];
// set completion block if you want
[CATransaction setCompletionBlock:^{ NSLog(@"I'm done"); }];

// start a keyframe animation
CAKeyframeAnimation *key1 = .....

// start another keyframe animation block
CAKeyframeAnimation *key2 = ......

// Maybe do a basic animation
CABasicAnimation *anim1 = .....

// close out all the animations and have them start
[CATransaction commit];
person Jack Cox    schedule 02.04.2013
comment
как это делается с анимацией по ключевым кадрам, не могли бы вы дать хотя бы немного псевдокода - person guenis; 02.04.2013