2010-08-21 18 views
5

¿Cómo se detecta cuando un usuario hace clic en el botón verde maximizar o acercar (+) en NSWindow sin usar el NSWindowDidResizeNotification?Cómo detectar NSWindow Maximize o Zoom Event?

La razón por la que no quiero usar NSWindowDidResizeNotification es porque también se activa repetidamente a medida que el usuario hace clic y arrastra para cambiar manualmente el tamaño de la ventana. Tengo un código que deseo ejecutar y solo debe disparar una vez cuando el usuario amplía o de-zooms la ventana usando el botón verde en la esquina superior izquierda y no muchas veces al cambiar manualmente el tamaño de la ventana.

Respuesta

9

Estos dos métodos ventana de delegados pueden ser útiles:

- windowWillUseStandardFrame:defaultFrame: 
- windowShouldZoom:toFrame: 

También puede considerar la subclasificación NSWindow y reemplazando el método zoom:.

+0

Eso es todo! La solución de mi pobre hombre fue crear un indicador BOOL "windowIsResizing" y configurarlo en "SÍ" en el NSWindowWillStartLiveResizeNotification y volver a "NO" en el NSWindowWillEndLiveResizeNotification. Luego, en la notificación WindowDidResize, hice "if (! WindowIsResizing) ..." y cuando la ventana se redimensionaba manualmente, esto impedía la activación múltiple del código que quería ejecutar solo una vez, solo se activaba cuando el usuario presionaba el botón de zoom Pero esto es mucho mejor, gracias! – EagleOfToledo

0

@EagleOfToledo, en base a su pregunta y sus comentarios sobre la respuesta de Todd Yandell, creo que sólo necesita este método delegado:

Swift

optional func windowDidEndLiveResize(_ notification: NSNotification) 

Objective-C

- (void)windowDidEndLiveResize:(NSNotification *)notification 

Este método solo se invocará una vez, sin importar que haga clic en el botón de zoom o cambie el tamaño manualmente.