2009-07-24 6 views
0

Par exemple, je peux y accéder comme ceci:Comment puis-je modifier les valeurs d'une transformation?

self.layer.transform.m32 

mais je ne peux pas attribuer une valeur à elle, comme

self.layer.transform.m32 = 0.3f; 

il dit cession 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épondre

4

Vous accédez à la propriété appelée "transform" (classe CALayer), c'est-à-dire la 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 initialiser la variable temporaire en premier (type CATransform3D), puis l'affecter entièrement à la propriété.

La même chose se produira avec toutes les propriétés auxquelles vous essayez d'accéder de cette manière.

Par exemple:

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

échantillon A travaillé (via 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

Il me semble avoir accès et la configuration sans problème transforme 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

self.layer.transform.m32 = 0.3f; ne feront rien pour transformer 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 CATransform3D de la couche.

Cela fonctionnerait (similaire à mahboudz » exemple de code):

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 
Questions connexes