2010-08-21 5 views
5

NSWindowDidResizeNotification을 사용하지 않고 NSWindow에서 사용자가 녹색 최대화 또는 확대 (+) 버튼을 클릭하면 어떻게 감지합니까?NSWindow를 감지하는 방법 이벤트를 최대화 또는 확대 하시겠습니까?

NSWindowDidResizeNotification을 사용하지 않으려는 이유는 사용자가 클릭하고 끌어서 창 크기를 수동으로 조정할 때 반복적으로 트리거되기 때문입니다. 실행하고 싶은 코드가 있습니다. 사용자가 줌을 또는 de-zooms 왼쪽 위의 녹색 버튼을 사용하여 창을 수동으로 크기를 조정할 때 여러 번 줌하면 한 번만 실행해야합니다.

답변

9

이 두 창을 위임 방법이 유용 할 수 있습니다 :

- windowWillUseStandardFrame:defaultFrame: 
- windowShouldZoom:toFrame: 

또한 NSWindow 표시를 서브 클래스와 zoom: 메서드를 재정의하는 것이 좋습니다.

스위프트

optional func windowDidEndLiveResize(_ notification: NSNotification) 

목표 - C

- (void)windowDidEndLiveResize:(NSNotification *)notification 

가 :

+0

그게 전부 야! 내 가난한 사람의 해결 방법은 BOOL 플래그 "windowIsResizing"을 만들고 NSWindowWillStartLiveResizeNotification에서 "YES"로 설정하고 NSWindowWillEndLiveResizeNotification에서 "NO"로 되돌려 놓습니다. 그런 다음 WindowDidResize 알림에서 "if (! windowIsResizing) ..."을 수행하고 창 크기를 수동으로 조정할 때 이렇게하면 한 번만 실행하려는 코드가 여러 번 실행되는 것을 방지 할 수 있습니다.이 경우 사용자가 줌 버튼. 그러나 이것은 훨씬 더 좋습니다, 감사합니다! – EagleOfToledo

0

@EagleOfToledo, 당신의 질문 토드 Yandell의 대답에 귀하의 의견에 따라, 당신은이 위임 방법을 필요가 있다고 생각 이 메서드는 확대/축소 단추를 클릭하거나 수동으로 크기를 변경하는 경우에만 한 번 호출됩니다.

관련 문제