2012-04-02 30 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

相关问题