mea*_*a36 3 macos graphics quartz-2d
我正在使用quartz2d制作我的第一个mac应用程序,我想知道是否可以使背景透明.这意味着,如果所有应用程序都设置了背景透明,那么当它运行时,您将看到除了它背后的应用程序之外的任何内容.
我觉得这是不可能的,但我想我还是会问.
您甚至可以使应用程序的完全透明窗口成为点击.请参阅:在Mac OS X上绘制自定义窗口.
制作自定义窗口以透明窗口开始.我将使用名为RoundWindow的自定义NSWindow子类.这个子类的构造函数如下所示:
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)deferCreation
{
self = [super
initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:bufferingType
defer:deferCreation];
if (self)
{
[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
这个构造函数对窗口所做的三个更改是相当明显的:
- NSBorderlessWindowMask(没有标准窗口框架的窗口)
- setOpaque:NO(这样窗口的任何部分都可以透明)
- setBackgroundColor:[NSColor clearColor](如果我们什么都不做,这会把窗口画成透明的)
结果是一个透明的矩形窗口.可以直接调用此方法(如果在代码中创建窗口).从NIB加载窗口时,NIB加载程序也会调用它.
由于此窗口使用NSBorderlessWindowMask样式,因此我们必须覆盖canBecomeKeyWindow和canBecomeMainWindow方法以返回YES.这些覆盖将允许窗口分别成为键盘焦点和主应用程序窗口.
来源: 在Mac OS X上绘制自定义窗口.