2010-11-22 25 views
2

Salut, je suis totalement confus avec les animations CGAffineTransform. Tout ce que je veux faire est de déplacer un sprite d'une position sur la droite à une position sur la gauche. Quand il s'est arrêté, je veux le "réinitialiser", c'est-à-dire le ramener à l'endroit où il a commencé. Si l'application se termine (avec multitâche), je veux réinitialiser la position au démarrage et répéter l'animation.Aide de l'iPhone avec les animations CGAffineTransform réinitialisation?

C'est ce que je me sers pour faire l'animation ..

[UIImageView animateWithDuration:1.5 
            delay:0.0 
           options:(UIViewAnimationOptionAllowUserInteraction | 
              UIViewAnimationOptionCurveLinear 
             ) 
           animations:^(void){ 

            ufo.transform = CGAffineTransformTranslate(ufo.transform, -270, 100); 

           } 
           completion:^(BOOL finished){ 
            if(finished){ 
             NSLog(@"ufo finished"); 

             [self ufoAnimationDidStop]; 
            } 
           }]; 

Si je comprends bien les CGAffineTransforms fait juste visuellement l'apparence de sprite comme il est déplacé, mais ne bouge pas réellement. Par conséquent, lorsque j'essaie de "réinitialiser" la position en utilisant

ufo.center = CGPointMake (355, 70);

cela ne fait rien.

j'ai quelque chose de travail, si je l'appelle

ufo.transform = CGAffineTransformTranslate (ufo.transform, 270, -100);

il se réinitialise. Le problème est que si je quitte l'application à mi-chemin de l'animation, alors quand il redémarre, il ne commence pas nécessairement depuis le début et il ne va pas au bon endroit, il devient fondamentalement fou!

Existe-t-il un moyen de supprimer simplement les transformations qui y sont appliquées? J'envisage d'utiliser une minuterie, mais cela semble stupide quand cette méthode devrait fonctionner. J'ai lutté avec cela pendant un certain temps, donc toute aide serait très appréciée.

Merci

Répondre

4

L'application d'une transformation à vue ne change pas vraiment le centre ou les limites de la vue; cela change juste la façon dont la vue est affichée sur l'écran. Vous souhaitez définir votre transformation sur CGAffineTransformIdentity pour vous assurer qu'elle ressemble à "normal". Vous pouvez le définir avant de démarrer votre animation et la définir comme vous voulez l'animer.

+0

Merci beaucoup qui fonctionne, j'ai lutté avec ça pendant si longtemps! Une question, puis-je vérifier qu'une transformation a été appliquée avant d'appeler cette ligne - ou en ai-je besoin? Je veux m'assurer que toutes mes animations sont réinitialisées lorsque l'application est active mais qu'elles n'ont peut-être pas déjà été transformées? – user157733

+0

Bien sûr! Il existe une méthode pour la classe CGAffineTransform appelée CGAffineTransformIsIdentity. Je ne suis pas complètement familier avec quand il devrait être utilisé, mais il vous dira si votre transformation actuelle est la transformation d'identité ou non. – GendoIkari