J'ai découvert une méthode pour atteindre mon résultat. Je ne suis pas sûr que ce soit la meilleure façon de le faire, je serais toujours reconnaissant pour d'autres idées.
Je crée les calques layer1 et layer2 en même temps et ajoute les deux calques à la couche view.layer. Ensuite, j'anime layer1 pour le déplacer vers une nouvelle position, duration = 0.3. Pour layer2 je m'anime avec un groupe qui consiste en un mouvement (beginTime = 0.3, durée = 0.3) et une autre animation utilisant l'attribut caché. Cette dernière masque immédiatement layer2, puis le affiche à beginTime = 0.3. Pour réaliser cette dernière animation, j'ai utilisé un CAKeyFrameAnimation parce que cette animation doit être discrète - soit entièrement cachée, soit totalement non cachée.
Voici le code. Je l'ai simplifié en supprimant des détails sur ma mise en œuvre, donc ce n'est pas le code réel dans mon application - des excuses s'il y a des erreurs.
CALayer layer1 = [CALayer layer];
CALayer layer2 = [CALayer layer];
/*
* set attributes of the layers -- cut out of this example
*/
layer1.position = toPosition1; // positions when animation is complete
layer2.position = toPosition2;
[myView.layer addSublayer:layer1];
[myView.layer addSublayer:layer2];
// animate layer 1
CABasicAnimation* move1 = [CABasicAnimation animationWithKeyPath:@"position"];
move1.duration = 0.3;
move1.fromValue = fromPosition2;
[layer1 addAnimation:move1 forKey:nil];
// animate layer 2 with a group
CABasicAnimation* move2 = [CABasicAnimation animationWithKeyPath:@"position"];
move2.duration = 0.3;
move2.fromValue = fromPosition2;
move2.beginTime = 0.3;
CAKeyframeAnimation *show = [CAKeyframeAnimation animationWithKeyPath:@"hidden"];
show.values = [NSArray arrayWithObjects:[NSNumber numberWithBool:YES], [NSNumber numberWithBool:NO], [NSNumber numberWithBool:NO], nil];
// times are given as fractions of the duration time -- hidden for first 50% of 0.6 sec
show.keyTimes = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:1.0], nil];
show.calculationMode = kCAAnimationDiscrete;
show.duration = 0.6;
show.beginTime = 0;
CAAnimationGroup *grp = [CAAnimationGroup animation];
[grp setAnimations:[NSArray arrayWithObjects:move2, show, nil ]];
grp.duration = 0.6;
[layer2 addAnimation:grp forKey:nil];
Je