Pregunta

UIView tiene las propiedades frame, bounds, center, y origin, y todos parecen estar interrelacionados.La mayor parte del tiempo trato con frame al configurar la posición y el tamaño de un UIView.Entiendo que frame está utilizando el sistema de coordenadas global y bounds está usando las coordenadas de la vista local (por lo tanto, x e y son 0, pero no siempre), pero todavía me resulta confuso cuándo usar qué.

¿En qué contexto (y cuál es el momento adecuado) las otras propiedades (bounds, center, origin) ¿debería ser usado?

¿Fue útil?

Solución

La respuesta anterior de Marco es correcta, pero sólo para ampliar la pregunta de "bajo qué contexto"...

marco - esta es la propiedad que utiliza con más frecuencia para las aplicaciones normales de iPhone.la mayoría de los controles se distribuirán en relación con el control "que contiene", por lo que frame.origin corresponderá directamente a donde debe mostrarse el control, y frame.size determinará qué tan grande debe ser el control.

centro - esta es la propiedad en la que probablemente te concentrarás en juegos y animaciones basados ​​en sprites donde puede ocurrir movimiento o escala.De forma predeterminada, la animación y la rotación se basarán en el centro de UIView.Rara vez tiene sentido intentar gestionar dichos objetos mediante la propiedad frame.

límites - esta propiedad no es una propiedad de posicionamiento, pero define el área dibujable de UIView "en relación" con el marco.Por defecto esta propiedad suele ser (0, 0, ancho, altura).Cambiar esta propiedad le permitirá dibujar fuera del marco o restringir el dibujo a un área más pequeña dentro del marco.Puede encontrar una buena discusión sobre esto en el siguiente enlace.Es poco común que se manipule esta propiedad a menos que exista una necesidad específica de ajustar la región del dibujo.La única excepción es que la mayoría de los programas utilizarán el [[UIScreen mainScreen] bounds] al inicio para determinar el área visible de la aplicación y configurar el marco de su UIView inicial en consecuencia.

¿Por qué hay un rectángulo de marco y un rectángulo de límites en una UIView?

Esperemos que esto ayude a aclarar las circunstancias en las que se podría utilizar cada propiedad.

Otros consejos

Están valores relacionados, y se mantienen consistente por los métodos propiedad setter / getter (y utilizando el hecho de que el marco es un valor puramente sintetizado, no respaldada por una variable de instancia real).

Las ecuaciones principales son:

frame.origin = center - bounds.size / 2

(que es el mismo que)

center = frame.origin + bounds.size / 2

(y también hay)

frame.size = bounds.size

Eso no es código, sólo ecuaciones para expresar el invariante entre las tres propiedades. Estas ecuaciones también asumen de transformar su punto de vista es la identidad, que es por defecto. Si no es así, entonces los límites y centro mantienen el mismo significado, pero pueden cambiar el marco. A menos que estés haciendo rotaciones no en ángulo recto, el marco será siempre el punto de vista transformado en términos de coordenadas del SuperView.

Esta materia es todo lo explica con más detalle con un útil mini-biblioteca aquí:

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

Las propiedades center, bounds y frame están entrelazados:cambiar uno actualizará los demás, así que úsalos como quieras.Por ejemplo, en lugar de modificar los parámetros x/y de frame para volver a centrar una vista, simplemente actualice el center propiedad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top