2012-04-02 34 views
10

是否可以切出NSWindow或NSView的某些部分並使其透視?我有一個的NSView一個NSWindow,我想要麼:NSView或NSWindow中的孔

A)使在NSWindow一個洞,以便能夠通過它或

B)設置我的NSWindow後臺看到有一個明確的顏色,然後在上面創建一個NSView,並設置我的NSViews不透明度的某個部分,以便能夠看到桌面。

這是我想創建的效果:

enter image description here

+0

[如何使NSView透明並顯示NSWindow下的內容?](http://stackoverflow.com/questions/8217487/how-to-make-an-nsview-transparent-and-show- whats-under-the-nswindow) – 2012-04-02 01:37:39

回答

19

是的,這是可能的,實際上沒有那麼難。

首先,創建一個NSView的子類。在drawRect:,類型:

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

這將清除在(100,100,100,100)矩形的所有像素。

接下來,設置您剛纔爲你的類窗口的內容視圖的類:

Setting the class

確保您NSWindowsetOpaque:NO

[window setOpaque:NO]; 

然後你就完成了。啓動你的應用程序並查看結果:

Holy window, batman!

惹繪圖代碼來獲得你想要的形狀,但記得要使用NSCompositeClear。有關合成模式的更多信息,請查看developer documentation

+0

謝謝!真的很好回答 – 2012-04-02 02:16:01

+0

如果我想保留第一個視圖並添加第二個視圖或子視圖,我仍然可以使用NSCompositeClear嗎?是否有可能通過一個視圖和一個窗口來看? – 2012-04-02 05:22:45

+0

@GrantWilkinson As [截圖](http://i.imgur.com/1RMRH.png)顯示,superview的繪圖代碼中的「NSCompositeClear」不會繪製子視圖。然而,子視圖的繪圖代碼中的NSCompositeClear將通過它的超級視圖來繪製。 – spudwaffle 2012-04-02 17:24:32

相關問題