2010-04-24 8 views
0

Je frappais ma tête sur le mur ici en raison de ce problème:iPhone - faire le permanent CGAffineTransform

Lorsque je crée un UIImageView ce point de vue a une certaine orientation et la taille. Appelons cet état "A".

Cette vue répond aux robinets. Il peut être traîné autour de l'écran.

À un moment donné dans le code, j'applique une CGAffineTransform à la vue. Peu importe si l'affine est une échelle, une rotation, une traduction ou une combinaison de tous. Peu importe aussi si la transformation est absolue ou relative. Sans parler du fait que le dispositif peut changer son orientation et que la vue est autorotée à l'orientation correcte (que l'on peut appeler une sorte de rotation ou de transformation appliquée à la vue). Le problème est: au moment où je touche cet objet ou essaie d'animer sa transparence ou tout autre paramètre, il "se souvient" de l'état "A" et fait toutes les animations de cet état, pas de l'état actuel. Si je touche simplement la vue, elle revient instantanément à l'état "A". Le code ne le fait pas tout seul. C'est assez agaçant. Comment faire une vue supposer son état actuel de transformations comme état de réinitialisation ou initial? En d'autres termes, comment faire pour que ma vue oublie ses transformations ou états passés?

La seule façon que je connaisse est de recréer la vue, mais c'est une façon ridicule de le faire.

Y at-il un moyen de faire ce travail comme je l'ai décrit?

grâce

+0

"J'applique une CGAffineTransform à la vue" <- veuillez montrer ce que cela signifie dans le code. – Ken

+0

s'il vous plaît afficher le code .... –

+0

Sans plus d'informations, je suppose que vous manipulez une copie de la vue, ou en appliquant la transformation à une copie (ou un nouvel objet). Vérifiez l'adresse mémoire de la référence de pointeur à votre objet "A" et comparez-le à l'objet qui est transformé, et à celui qui est déplacé. Ils devraient tous être les mêmes. – gnasher

Répondre

2

AFAIK, toutes les animations du SDK crée automatiquement une copie, effectuer l'animation sur la copie tout en cachant l'original. Dans votre code, vous aurez une ligne getState qui démarre et crée le pointeur vers l'objet animation. Pour le rendre permanent à la fin de votre routine d'animation, placez la vue des objets d'origine dans la vue d'animation.

IIRC quelque chose comme ça, mais je n'ai pas mes exemples de code devant moi:

myOriginalObject.view = myMnimationObject.view 

Évidemment, cela ne avant de libérer des animations mais après vous avez terminé avec les transformations.

Questions connexes