/ / Comment puis-je modifier les valeurs d'une transformation? - iphone, matrice, transformer

Comment puis-je modifier les valeurs d'une transformation? - iphone, matrice, transformation

Par exemple, je peux y accéder comme ceci:

self.layer.transform.m32

mais je ne peux pas lui attribuer de valeur, comme

self.layer.transform.m32 = 0.3f;

il indique une affectation non valide. Mais cela ne devrait-il pas fonctionner?

struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};

au moins Xcode reconnaît tous ces champs dans la matrice.

Réponses:

4 pour la réponse № 1

Vous accédez à une propriété appelée "transform" (classe CALayer), c'est-à-dire une fonction de définition d'appel avec le type d'argument CATransform3D. Par conséquent, vous ne pouvez pas accéder directement aux membres de la structure CATransform3D.

Vous devrez peut-être d'abord initialiser la variable temporaire (type CATransform3D), puis l'assigner entièrement à la propriété.

La même chose se produira avec toute propriété à laquelle vous essayez d'accéder de cette façon.

Par exemple:

view.frame.origin.x = 0; //will **not** work for UIView* view

Échantillon travaillé (via une variable temporaire):

CATransform3D temp = self.layer.transform; //create  temporary copy
temp.m32 = 0.3f;
self.layer.transform = temp; //call setter [self.layer setTransform:temp]- mean the same

0 pour la réponse № 2

Il me semble que je n'ai aucun problème à accéder aux transformations et à les définir de cette façon;

CATransform3D t = view.transform;
NSLog(@"t.m32 = %f, t.m34 = %f", t.m32, t.m34);
t.m34 = 100.5;
NSLog(@"t.m32 = %f, t.m34 = %f", t.m32, t.m34);
view.transform = t;

0 pour la réponse № 3

self.layer.transform.m32 = 0.3f; ne fera rien à la transformation de la couche.

self.layer.transform renvoie un CATransform3D, qui n'est pas un objet. Cela signifie qu'il est copié et si vous changez .m32 vous "changez la copie, pas le CATransform3D du calque.

Cela fonctionnerait (similaire à l'exemple de code mahboudz "):

CATransform3D t = self.layer.transform; // t is a copy of self.layer.transform
t.m32 = 0.3f; // modify the copy
self.layer.transform = t; // copy it back into self.layer.transform