我正在使用quartz2d制作我的第一个mac应用程序,我想知道是否可以使背景透明。这意味着,如果所有应用程序都设置了背景透明,那么当它运行时,您将看不到除了它背后的应用程序。
我觉得这是不可能的,但我想我还是会问。
答案 0 :(得分:6)
你甚至可以让应用程序的完全透明的窗口点击。请参阅:Drawing a custom window on Mac OS X。
制作自定义窗口以透明窗口开始。我会用一个 自定义NSWindow子类名为RoundWindow。这个的构造函数 子类看起来像这样:
- (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。这些覆盖将允许窗口成为键盘 焦点和主要应用程序窗口。