2010-08-21 47 views
5

Làm cách nào để bạn phát hiện khi người dùng nhấp vào nút tối đa hoặc thu phóng màu xanh lá cây trên NSWindow mà không sử dụng NSWindowDidResizeNotification?Làm thế nào để phát hiện NSWindow Phóng to hoặc thu phóng sự kiện?

Lý do tôi không muốn sử dụng NSWindowDidResizeNotification là do điều đó cũng được kích hoạt nhiều lần khi người dùng nhấp và kéo để thay đổi kích thước cửa sổ theo cách thủ công. Tôi có một số mã mà tôi muốn thực thi và nó chỉ nên kích hoạt một lần khi người dùng phóng to hoặc de-zooms cửa sổ bằng nút màu xanh lá cây ở góc trên cùng bên trái và không nhiều lần khi thay đổi kích thước cửa sổ theo cách thủ công.

Trả lời

9

Hai phương pháp cửa sổ đại biểu có thể hữu ích:

- windowWillUseStandardFrame:defaultFrame: 
- windowShouldZoom:toFrame: 

Bạn cũng có thể xem xét subclassing NSWindow và trọng phương pháp zoom:.

+0

Đúng vậy! Cách giải quyết của người nghèo của tôi là tạo ra một lá cờ BOOL "windowIsResizing" và đặt nó thành "CÓ" trên NSWindowWillStartLiveResizeNotification và quay lại "KHÔNG" trên NSWindowWillEndLiveResizeNotification. Sau đó, trong thông báo WindowDidResize tôi đã làm "if (! WindowIsResizing) ..." và khi cửa sổ được thay đổi kích thước theo cách thủ công, điều này sẽ ngăn chặn việc kích hoạt nhiều mã mà tôi chỉ muốn thực hiện một lần, nó sẽ chỉ kích hoạt khi người dùng nhấn nút thu phóng. Nhưng điều này tốt hơn nhiều, cảm ơn! – EagleOfToledo

0

@EagleOfToledo, dựa trên câu hỏi của bạn và ý kiến ​​của bạn về câu trả lời Todd Yandell, tôi nghĩ rằng bạn chỉ cần phương pháp đại biểu này:

Swift

optional func windowDidEndLiveResize(_ notification: NSNotification) 

Objective-C

- (void)windowDidEndLiveResize:(NSNotification *)notification 

Phương thức này sẽ chỉ được gọi một lần cho dù bạn nhấp vào nút thu phóng hay thay đổi kích thước theo cách thủ công.

Các vấn đề liên quan