2010-08-21 11 views
5

Come si rileva quando un utente fa clic sul pulsante di ingrandimento o zoom (+) verde sulla NSWindow senza utilizzare lo NSWindowDidResizeNotification?Come rilevare l'evento NSWindow Maximize o Zoom?

Il motivo per cui non desidero utilizzare NSWindowDidResizeNotification è perché viene attivato anche ripetutamente mentre l'utente fa clic e trascina per ridimensionare manualmente la finestra. Ho un codice che voglio eseguire e dovrebbe sparare solo quando l'utente ingrandisce o de-zoom la finestra utilizzando il pulsante verde nell'angolo in alto a sinistra e non molte volte quando ridimensiona manualmente la finestra.

risposta

9

Questi due metodi finestra delegati possono essere utili:

- windowWillUseStandardFrame:defaultFrame: 
- windowShouldZoom:toFrame: 

Si potrebbe anche considerare sottoclasse NSWindow e l'override del metodo zoom:.

+0

Questo è tutto! La soluzione del mio povero uomo era di creare un flag BOOL "windowIsResizing" e impostarlo su "YES" su NSWindowWillStartLiveResizeNotification e tornare a "NO" su NSWindowWillEndLiveResizeNotification. Quindi nella notifica WindowDidResize ho fatto "if (! WindowIsResizing) ..." e quando la finestra veniva ridimensionata manualmente questo avrebbe impedito l'attivazione multipla del codice che avrei voluto eseguire solo una volta, si accenderebbe solo quando l'utente ha premuto il tasto pulsante zoom. Ma è molto meglio, grazie! – EagleOfToledo

0

@EagleOfToledo, in base alla domanda e le vostre osservazioni sulla risposta di Todd Yandell, penso che solo bisogno di questo metodo delegato:

Swift

optional func windowDidEndLiveResize(_ notification: NSNotification) 

Objective-C

- (void)windowDidEndLiveResize:(NSNotification *)notification 

Questo metodo verrà invocato solo se non si fa clic sul pulsante di zoom o si ridimensiona manualmente.

Problemi correlati