3 votes

Obtenir le centre d'une UIView après CGAffineTransform

Supposons que j'aie une petite UIView en tant qu'enfant/sous-vue d'une UIView plus grande, et que cet enfant puisse être déplacé via des CGAffineTransforms. Comment le parent pourrait-il savoir quel est le véritable "centre" de cette vue dans son propre système de coordonnées ? J'ai essayé d'utiliser les routines convertPoint avec ce qui est renvoyé par child.center, mais cela ne fonctionne pas... le "centre" est-il complètement faux dans ce contexte ou est-ce que j'utilise simplement la mauvaise méthode ?

6voto

Mazyod Points 6072

EDIT :

Après avoir effectué quelques tests, j'ai constaté ce qui suit :

Les UIViews n'ont pas de propriété anchorPoint, mais ils ont une propriété center. La propriété de centre est toujours calculée correctement après l'application de transformations, à l'exception d'une transformation de translation, pour laquelle vous devez procéder comme suit :

CGPoint realCenter = CGPointMake(myView.center.x + myView.frame.origin.x, ...);

Quant à CALayer ils ont bien une propriété anchorPoint, mais pas de propriété center. Vous devez donc calculer le centre manuellement en effectuant des calculs sur la propriété position, la propriété anchorPoint et la translation de votre couche.

Je ne peux pas fournir de code, car je ne suis pas sûr de la méthode que vous utilisez, mais pour résumer, vous devez déployer votre propre calculateur central dans les deux cas.


Veuillez regarder attentivement les images ci-dessous (avec l'aimable autorisation des diapositives du cours de développement d'iPhone de Stanford) :

Avant d'appliquer toute rotation :

enter image description here

Après avoir appliqué une rotation de 45° :

enter image description here

Conclusion :

Remarquez que l'ancien centre était (300, 225) et que le nouveau centre est, eh bien pas nouveau ! C'est le même. Si vous faites tout correctement, votre centre devrait être le même. Si vous avez un autre point dans la vue que vous souhaitez calculer, vous devez le faire vous-même.

Remarquez également comment le cadre est passé de (200, 100, 200, 250) à (140, 65, 320, 320). C'est ainsi que UIKit fait sa magie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X