如何使NSView透明并显示NSWindow下的内容?

acr*_*eek 9 macos cocoa objective-c

我正在osx中​​制作放大镜样式的应用程序以获得乐趣,我遇到了一个障碍,我似乎无法找到答案.

我在NSWindow中有一个NSView我将视图设置为clearColor,alpha设置为.25,但我无法弄清楚如何使NSWView在NSView后透明,这样你就可以在应用程序选中时看到应用程序下面的内容.

通过doc's挖掘似乎无法找到我正在寻找的任何想法?

谢谢

小智 21

也许试试NSWindow setOpaque:,你还需要用透明的颜色设置窗口的背景颜色(setBackgroundColor:)

这是我刚刚做的快速示例:

自定义NSView名为myView:

-(void)drawRect:(NSRect)dirtyRect
{
    [[NSColor windowBackgroundColor] set];  // Using the default window colour,
    dirtyRect.size.width /= 2;
    NSRectFill(dirtyRect);      // Only draw the part you need.
}
Run Code Online (Sandbox Code Playgroud)

接下来,我设置一个窗口的contentView一个myView实例.我是在IB中完成的,但您可以手动设置它setContentView.

我配置了这样的窗口:

[myWin setOpaque:NO];  //Tells the window manager that the window might have transparent parts.
[myWin setBackgroundColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.0]];  //Tells the window to use a transparent colour.
Run Code Online (Sandbox Code Playgroud)

这就是我得到的.

部分透明的窗口http://i44.tinypic.com/a41jxi.jpg

所以,就像我说的,你需要告诉窗口中使用一种无形的颜色作为背景,然后重绘你居然零件需要绘制.