194 votes

Le cadre d'UIView, les limites, le centre, l'origine, quand utiliser quoi?

UIView a la notion de cadre, de limites, au centre et à l'origine, et ils semblent tous être liés. La plupart du temps, je m'occupe de cadre lors de la définition de la position et de la taille d'une UIView (ou sous-classe). Je comprends que le cadre est à l'aide de système de coordonnées global et les limites à l'aide de coordonnées de la vue locale (il est donc x et y sont 0, mais pas toujours), mais il est encore confus pour moi quand utiliser quoi.

Question: dans quel contexte (et quel est le bon moment), les autres propriétés (limites, au centre, à l'origine) doit être utilisé?

238voto

Barney Mattox Points 2194

Marco réponse ci-dessus est correcte, mais juste de s'étendre sur la question "dans quel contexte"...

image - c'est la propriété que vous utiliser le plus souvent normale pour les applications iPhone. la plupart des commandes sont disposées par rapport à la "contenant" de contrôle de sorte que le cadre.origine correspondent directement à l'endroit où les besoins de contrôle de l'affichage, et le cadre.taille de déterminer quelle taille prendre le contrôle.

centre - c'est la propriété, vous serez susceptibles de se concentrer sur de sprite en fonction des jeux et des animations où le mouvement ou la mise à l'échelle peut se produire. Par défaut, l'animation et la rotation sera basé sur le centre de la UIView. Il est rarement intéressant d'essayer et de gérer de tels objets par la propriété frame.

limites : cette propriété n'est pas un positionnement à la propriété, mais définit le drawable domaine de la UIView "relative" à l'image. Par défaut, cette propriété est généralement de (0, 0, largeur, hauteur). La modification de cette propriété va vous permettre de dessiner en dehors du cadre ou de restreindre le dessin d'une petite zone à l'intérieur du cadre. Une bonne discussion de ce qui peut être trouvé sur le lien ci-dessous. Il est rare pour cette propriété d'être manipulés à moins qu'il y est besoin spécifique pour régler la zone d'affichage. La seule exception est que la plupart des programmes utilisent l' [[UIScreen mainScreen] bounds] au démarrage pour déterminer la zone visible de l'application et de la configuration initiale de l'UIView de l'image en conséquence.

Pourquoi est-il un rectangle de cadre et de limites rectangle dans une UIView?

Espérons que cela aide à clarifier les circonstances où chaque propriété peut s'habituer.

36voto

Tyler Points 16516

Ils sont liés à des valeurs, et conservés par la propriété méthodes setter/getter (et en utilisant le fait que l'image est purement synthétisés de la valeur, qui n'est pas soutenue par une variable d'instance).

Les principales équations sont:

frame.origin = center - bounds.size / 2

(qui est la même)

center = frame.origin + bounds.size / 2

(et il y a aussi)

frame.size = bounds.size

Ce n'est pas de code, juste des équations pour exprimer l'invariant entre les trois propriétés. Ces équations supposons également votre point de vue de la transformation de l'identité, qui est fait par défaut. Si elle ne l'est pas, ensuite, de limites et d'un centre de garder le même sens, mais l'image peut varier. Sauf si vous êtes non-droit-de l'angle de rotation, l'image sera toujours la vue transformée en termes de superview coordonnées.

Ce genre de choses est expliqué plus en détail avec une durée de mini-bibliothèque ici:

http://bynomial.com/blog/?p=24

18voto

Marco Mustapic Points 3327

Les propriétés center , bounds et frame sont interverrouillées: en changer une mettra à jour les autres, alors utilisez-les comme vous le souhaitez. Par exemple, au lieu de modifier les paramètres x / y de frame pour recentrer une vue, mettez simplement à jour la propriété center .

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