我正在使用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;
}
此构造函数对窗口所做的三处更改相当明显:
- NSBorderlessWindowMask(没有标准窗口框架的窗口)
- setOpaque:NO(这样窗口的任何部分都可以是透明的)
- setBackgroundColor:[NSColor clearColor] (如果我们什么都不做,这将使窗口透明)
结果是一个透明的矩形窗口。可以直接调用此方法(如果在代码中创建窗口)。当从 NIB 加载窗口时,NIB 加载器也会调用它。
由于此窗口使用 NSBorderlessWindowMask 样式,我们必须重写 canBecomeKeyWindow 和 canBecomeMainWindow 方法以返回 YES。这些覆盖将允许窗口分别成为键盘焦点和主应用程序窗口。
来源: 在 Mac OS X 上绘制自定义窗口。