objective-c cocoa nsview

objective c - NSView límites vs marco



objective-c cocoa (5)

¿Cuál es la diferencia entre los límites y el marco? De hecho, ¿por qué existen los "límites"? El tamaño de ''límites'' es igual al tamaño del marco, y el origen del límite siempre debe ser 0,0.


Desde la Guía de programación de arquitectura de vista y ventana para iOS:

Un objeto de vista rastrea su tamaño y ubicación usando su marco, límites y propiedades del centro:

La propiedad frame contiene el rectángulo frame, que especifica el tamaño y la ubicación de la vista en el sistema de coordenadas de su superview.

La propiedad bounds contiene el rectángulo de límites, que especifica el tamaño de la vista (y su origen de contenido) en el propio sistema de coordenadas local de la vista.

La propiedad central contiene el punto central conocido de la vista en el sistema de coordenadas de la supervista.

Aquí hay una buena visualización de esa explicación:


El origen del límite no siempre es 0,0. Es fácil comprender la diferencia entre el marco y los límites, si observa cómo el cambio limita la propiedad de UIScrollView durante el desplazamiento.

Por ejemplo, tiene UIScrollView con frame (0, 0, 320, 460), bounds (0, 0, 320, 460) y ContentSize (640, 460). Su marco siempre será (0, 0, 320, 460), pero la coordenada X de los límites cambiará dependiendo de la distancia de desplazamiento.

Puede ser útil si quieres cambiar algo en tu UIScrollView (crear y eliminar páginas dinámicamente, por ejemplo), así que quieres saber la distancia de desplazamiento.


Los documentos de la manzana en la primera respuesta no cubren lo que sucede con el marco y los límites después de girar a la orientación horizontal. Para que sea más completo, debe saber que el marco de la ventana y la vista raíz no cambian después de la rotación, pero sí los límites. Consulte este artículo para obtener un poco más de detalle y tenga cuidado al utilizar el marco como referencia para cualquier otra cosa que no sea la orientación vertical.

Del artículo:

Si su controlador de vista tiene la vista de nivel superior que no es de ventana (es decir, es el controlador de vista más inferior), entonces

self.frame

siempre está en orientación vertical. ¿Qué? Sí, siempre en retrato: lo que cambia es la transformación de tu vista. Entonces tus

self.bounds

siempre es preciso (teniendo en cuenta el último punto), pero

self.frame

puede o no dar la relación de aspecto que el usuario realmente está viendo, ya que el marco de cada vista se informa en términos de las coordenadas de la supervista, y tiene en cuenta cualquier transformación aplicada a la vista.


Un marco de vistas es el tamaño de un rectángulo en el que puede caber por completo. Siempre parece que los límites y el marco son los mismos, pero ese no es el caso. ¡Considera un cuadrado que gira alrededor de 45 grados!

Aquí el marco de este cuadrado rotado será el rectángulo para rellenarlo completamente y por lo tanto diferirá de los límites de este objeto.

La PS, principalmente en marcos y límites de objetos girados, tiende a diferir.


marco es valores de coordenadas en el sistema de coordenadas de la vista

el sistema de dibujo usa los límites para dibujar el contenido de la vista, cuando el dibujo está hecho, el sistema usará una operación de transformación para asignar el contenido al marco de la vista