2009-05-18 5 views
2

J'ai essayé ceci:Comment puis-je obtenir la transformation actuelle de la couche de présentation correctement?

CATransform3D rotationTransform = [[self.layer presentationLayer] transform]; 

Cela ne fonctionnera pas, car le compilateur jeter un avertissement et une erreur:

Warning: Multiple methods "-transform" found. Error: Invalid initializer.

Alors j'ai essayé ceci:

CATransform3D rotationTransform = [[self.layer presentationLayer] valueForKey:@"transform"]; 

Error: Invalid initializer.

Quel est le problème avec cela?

Répondre

6

-presentationLayer renvoie id. Vous avez besoin de jeter de nouveau à un CALayer:

CATransform3D rotationTransform = [(CALayer*)[self.layer presentationLayer] transform]; 

Pour être très sûr, vous vérifier d'abord:

CATransform3D rotationTransform = {0}; 
CALayer* presentationLayer = (CALayer*)[self.layer presentationLayer]; 
if([presentationLayer respondsToSelector:@selector(transform)]) { 
    rotationTransform = presentationLayer.transform; 
} 

Mais dans la pratique, cela va être très bien sans cette vérification. Dans le second cas, -valueForKey: renvoie également un id que vous essayez d'affecter à struct, ce qui n'est pas possible implicitement. Vous ne pouvez pas simplement lancer un pointeur d'objet dans une structure.

+0

J'ai aussi corrigé cela dans la réponse originale qui a déclenché cette question: http://stackoverflow.com/questions/877198/is-there-a-way-to-figure-out-how-many-degrees-an- vue-est-tourné-actuellement-durin/878618 # 878618. Il aurait pu attendre un peu et j'aurais modifié ma réponse plutôt que de poser une toute nouvelle question. Cependant, cela pourrait être utile de garder comme un standalone pour les gens Googling quelque chose de similaire. –

+0

Juste pour ajouter ici ... Je luttais avec ceci: Chaque transformation doit avoir lieu à partir du point où elle était réglée dans la dernière position. Alors qu'une vue tournée à 15 degrés devrait être tourné de 15 degrés à tout autre angle. i.e réglage de la valeur de est très nécessaire sinon vous verrez une transformation avec un pépin – Nil

Questions connexes