2012-05-26 27 views
6

Me gustaría ser notificado cada vez que cambie NSView- (NSRect)visibleRect porque quiero hacer un diseño de subvista elaborado según el rect visible. Francamente, en este momento estoy perplejo; -visibleRect no emite notificaciones KVO (lo cual tiene sentido), y no parece haber forma de averiguar si el rect visible cambió o no sin llamar explícitamente al -visibleRect.Es posible observar -visibleRect

¿Es esto posible? (¿o es una idea terrible, terrible?)

+1

¿Por qué menos 1? – Vervious

Respuesta

6

Creo que puede anular -[NSView updateTrackingAreas] o escuchar NSViewDidUpdateTrackingAreasNotification. Esos pueden suceder en más ocasiones que solo un cambio del rect visible, pero deben ocurrir para cualquier cambio del rect visible. Creo.

Dicho esto, puede ser una idea terrible. Difícil saber :)

+0

Funcionable, gracias. – Vervious

+0

Buena pregunta y respuesta. Esta respuesta me ayudó a salir de un problema diferente al que me enfrentaba, pero también tengo esta pregunta. Y para esta pregunta, votaría esta respuesta pero no la aceptaría. – trss

+0

El documento para 'updateTrackingAreas' dice" Invocado automáticamente cuando la geometría de la vista cambia de modo que sus áreas de seguimiento deben ser recalculadas ". pero no está claro qué significa la geometría de la vista. Hay un tema en View Geometry pero que solo explica los límites y el marco. Sí explica visibleRect pero no lo llama como la geometría de la vista. – trss

1

Otra opción post 10.5 es el método -viewWillDraw que se llama justo antes de que se dibuje la vista (y sus subvistas). Puede buscar el rectángulo visible de la vista y realizar el diseño antes de llamar a [super viewWillDraw].

0

Las sugerencias de Ken de escuchar los cambios en el área de rastreo se sienten hacky pero parece funcionar, aunque solo se disparan una vez que se completa el cambio de tamaño. Si necesita actualizaciones durante el cambio de tamaño como lo hice, reemplazar -[NSView resizeWithOldSuperviewSize:] hará eso