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 № 1Si 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