/ / animations iphone consécutives - iphone, objectif-c, cacao-touch, animation

animations iphone consécutives - iphone, objectif-c, cacao-touch, animation

Je me demande quel est le meilleur moyen de mettre en œuvre unsérie d'animations différentes. Si j'appelle la méthode suivante et essaie d'animer le même objet à droite, à gauche et en haut, par exemple, cela ne fonctionnera pas, car le compilateur ne les traitera pas de manière linéaire, et je me retrouverai avec mon objet simplement monter (en sautant les marches pour aller à droite et à gauche):

    -(IBAction)clickStart
{
[self Animation1];
[self Animation2];
[self Animation3];

}

Maintenant, je pourrais le faire, mais cela me semble lourd et bizarre. Considérez ceci comme la méthode pour Animation1:

[pageShadowView setFrame:CGRectMake(100, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];

[UIView beginAnimations:@"Animation1" context:nil]; // Begin animation
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(Animation2)];

[pageShadowView setFrame:CGRectMake(200, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];

[UIView commitAnimations]; // End animations

Et puis, je pourrais faire la même chose dans Animation2, c.-à-d. appeler Animation3 une fois que c'est fait. Mais pour être honnête, cette méthode de codage est très déroutante et peu claire. Est-il possible d'obtenir un code plus "linéaire" comme celui que j'ai suggéré au début (ce qui ne fonctionne pas), ou devrais-je simplement vivre avec la méthode de sélection?

Merci pour toutes les suggestions!

Réponses:

10 pour la réponse № 1

Si vous ne devez pas prendre en charge iOS <4:

[UIView animateWithDuration:0.2 animations:^{
// animation 1
} completion:^(BOOL finished){
[UIView animateWithDuration:0.2 animations:^{
// animation 2
} completion^(BOOL finished){
[UIView animateWithDuration:0.2 animations:^{
// animation 3
}];
}];
}]

2 pour la réponse № 2

Nous avons créé un composant pour le chaînage d'étapes d'animation de manière déclarative à l'aide de blocs (CPAnimationSequence sur Github).

Il vous donne un code très lisible, quelque chose comme ceci:

[[CPAnimationSequence sequenceWithSteps:
[CPAnimationStep           for:0.25 animate:^{ self.imageView.alpha = 0.0; }],
[CPAnimationStep           for:0.25 animate:^{ self.headline.alpha = 0.0;  }],
[CPAnimationStep           for:0.25 animate:^{ self.content.alpha = 0.0;   }],
[CPAnimationStep after:1.0 for:0.25 animate:^{ self.headline.alpha = 1.0;  }],
[CPAnimationStep           for:0.25 animate:^{ self.content.alpha = 1.0;   }],
nil]
runAnimated:YES];

Par rapport à l'approche traditionnelle basée sur des blocs (bien décrite par Max), elle a l'avantage de faire correspondre l'intention et sa représentation: a séquence linéaire d'étapes à animer. Nous avons développé ce sujet dans un article sur notre blog de développement iOS.