2012-04-02 20 views
10

Có thể cắt bỏ các phần của NSWindow hoặc NSView và khiến chúng nhìn xuyên qua không? Tôi có một NSWindow với một NSView và tôi muốn một trong hai:Lỗ trong NSView hoặc NSWindow

A) tạo ra một lỗ trong NSWindow để có thể nhìn xuyên qua nó hoặc

B) thiết lập nền NSWindow tôi để có một màu sắc rõ ràng và sau đó tạo một NSView ở trên cùng và thiết lập một phần nào đó trong độ mờ của NSViews của tôi để có thể nhìn xuyên qua màn hình nền.

Đây là hiệu ứng tôi đang cố gắng để tạo ra:

enter image description here

+0

có thể trùng lặp của [Làm thế nào để làm cho một NSView minh bạch và hiển thị những gì dưới NSWindow?] (Http://stackoverflow.com/questions/8217487/how-to-make-an-nsview-transparent-and-show- whats-under-the-nswindow) –

Trả lời

19

Có, đó là có thể, và thực sự không phải là khó.

Trước tiên, tạo một lớp con của NSView. Trong drawRect:, nhập:

NSRectFillUsingOperation(NSMakeRect(100, 100, 100, 100), NSCompositeClear); 

Điều này xóa tất cả các pixel trong hình chữ nhật tại (100,100,100,100).

Tiếp theo, thiết lập các lớp học mà bạn chỉ cần thực hiện như các lớp xem nội dung của cửa sổ của bạn:

Setting the class

Hãy chắc chắn rằng bạn là NSWindowsetOpaque:NO.

[window setOpaque:NO]; 

Và bạn đã hoàn tất. Cháy lên ứng dụng của bạn và xem kết quả:

Holy window, batman!

Mess với mã vẽ để có được hình dạng bạn muốn, nhưng hãy nhớ sử dụng NSCompositeClear. Để biết thêm về chế độ tổng hợp, hãy xem developer documentation.

+0

Cảm ơn! câu trả lời thực sự tốt –

+0

Tôi vẫn có thể sử dụng NSCompositeClear nếu tôi muốn giữ chế độ xem đầu tiên và thêm chế độ xem thứ hai hoặc chế độ xem phụ không? Có thể xem qua một khung nhìn và cũng là một cửa sổ không? –

+0

@GrantWilkinson Khi [ảnh chụp màn hình này] (http://i.imgur.com/1RMRH.png) hiển thị, 'NSCompositeClear' trong mã vẽ của superview sẽ không vẽ qua các bản xem trước. 'NSCompositeClear' trong mã vẽ của subview, tuy nhiên, sẽ vẽ thông qua superview của nó. – spudwaffle