/ / Come posso modificare i valori di una trasformazione? - iphone, matrice, trasformazione

Come posso modificare i valori di una trasformazione? - iphone, matrix, transform

Ad esempio, posso accedervi in ​​questo modo:

self.layer.transform.m32

ma non posso assegnargli un valore, come

self.layer.transform.m32 = 0.3f;

dice assegnazione non valida. Ma non dovrebbe funzionare davvero?

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

almeno Xcode riconosce tutti questi campi nella matrice.

risposte:

4 per risposta № 1

Si accede alla proprietà denominata "trasforma" (classe CALayer), vale a dire la funzione di impostazione chiamata con tipo di argomento CATransform3D. Pertanto non è possibile accedere direttamente ai membri della struttura CATransform3D.

Potrebbe essere necessario inizializzare prima la variabile temporanea (tipo CATransform3D), quindi assegnarla interamente alla proprietà.

La stessa cosa accadrà con qualsiasi proprietà a cui si tenta di accedere in questo modo.

Per esempio:

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

Campione lavorato (tramite variabile temporanea):

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 per risposta № 2

Mi sembra di non avere problemi ad accedere e impostare le trasformazioni in questo modo;

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 per risposta № 3

self.layer.transform.m32 = 0.3f; non farò nulla alla trasformazione del layer.

self.layer.transform restituisce un CATransform3D, che non è un oggetto. Ciò significa che viene copiato e se si cambia .m32 stai cambiando la copia, non il CATransform3D del livello.

Funzionerebbe (simile a mahboudz "esempio di codice):

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