Convertir un CGPoint à partir d'une UIView système de coordonnées à un CALayer système de coordonnées
Il existe des méthodes pour le transfert d'un CGPoint d'une UIView à l'autre et d'un CALayer à l'autre. Je ne peux pas trouver un moyen de changer un CGPoint à partir d'une UIView le système de coordonnées à un CALayer du système de coordonnées.
Ne une couche et il est l'hôte de vue ont le même système de coordonnées? Ai-je besoin pour transformer les points entre eux?
Grâce,
Corey
[MODIFIER]
Merci pour la réponse! Il est difficile de trouver des informations sur les différences/similitudes entre le CA sur l'iPhone et le Mac. Je suis surpris, je n'arrivais pas à trouver cette question adressée directement à toute la Documentation d'Apple.
J'ai été la poursuite de cette réponse pour vous aider avec un bug je suis dépannage, et c'était si loin ma meilleure supposition, mais je suppose que je suis aboiements le mauvais arbre. Si les systèmes de coordonnées sont les mêmes, alors j'ai une autre question...
La question de l'heure, je vais avoir peut être trouvé ici sur un Débordement de Pile:
la couche de test de collision seulement le retour de couche quand la moitié inférieure de la couche est touché
OriginalL'auteur Corey Floyd | 2009-01-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir la
transform
propriété de CALayers appropriée à la transformer si vous voulez retourner à leur système de coordonnées, mais notez que cela sera probablement flip leur dessin de lacontents
ainsi (je n'ai pas testé, mais il est logique que cela serait vrai). Mon affirmation que le CALayer associée à une UIView partage le même système de coordonnées pourrait en fait être entièrement erronée. Il se pourrait aussi que CALayers utiliser le même système de coordonnées que UIViews (c'est à dire, ils ne sont jamais retourné verticalement), mais je pensais qu'ils étaient depuis CoreGraphics utilise une flippée du système de coordonnées par rapport à UIKit.Un moyen simple de tester serait d'ajouter un écran de la taille d'CALayer que la sous-couche d'un point de vue de la couche, puis ajouter une autre petite CALayer comme sous-couche. Vous pouvez l'installer en (0, 0, 320, 100) et de voir si il s'affiche sur le haut ou le bas de l'écran de l'iPhone. Cela vous indiquera la direction de l'axe Y va pour CoreAnimation.
Je viens de réalisé ce test moi-même, et il semble CALayers fait utiliser le même système de coordonnées que UIViews, donc mon affirmation que CALayer flip de l'axe des Y est certainement mauvais. Toutefois, si vous faire le dessin avec CoreGraphics directement, sachez que CoreGraphics ne utiliser une flippée de l'axe Y (bien que lors de l'élaboration dans une sous-classe UIView ou, je suppose, un CALayer délégué, le CoreGraphics contexte a déjà été modifié afin de correspondre à la UIView (ou CALayer) système de coordonnées).
Donc, en bref, si vous avez rendu à ce point, est le système de coordonnées de CALayer doit correspondre au système de coordonnées de son correspondant UIView.
OriginalL'auteur Lily Ballard
La documentation pour hitTest dit:
De sorte que vous devez faire (quelque chose comme ça):
self.layer
est en fait une racine de la couche, de sorte qu'il ne devrait avoir aucunsuperlayer
. Mais il fonctionne réellement. Merci!OriginalL'auteur schwa
En termes de documentation d'Apple, j'ai trouvé un "iPhone OS" Note " dans le Système de Coordonnées de la Couche de la section de la Core Animation Guide De Programmation (2008-11-13).
OriginalL'auteur otto
De mes tests, j'ai trouvé que les sous-couches de partager le même système de coordonnées que c'est le calque parent et, par conséquent, si vous ajoutez de la sous-couche pour une UIView couche alors qu'ils partagent le même système de coordonnées.
Dans le cas où vous voulez toujours de faire basculer le système de coordonnées de sorte qu'il est d'origine dans le coin supérieur gauche, vous devriez utiliser cette transformation permettant d'inverser l'axe y.
(x,y,1) = (x', y', 1) * [1 0 0],[0 -1 0],[0 hauteur 1]
qui traduit le code est:
[your_layer setAffineTransform:CGAffineTransformMake(1,0,0,-1,0,hauteur)];
OriginalL'auteur Marc M
Je crois que le système de coordonnées d'une UIView et ses associés couche doit être la même. Toutefois, si vous créez des calques vous-même, le système de coordonnées est retourné verticalement.
OriginalL'auteur Lily Ballard
OriginalL'auteur comonitos
Je crois que les deux ont le même système de coordonnées.
OriginalL'auteur Sophie Alpert