mac app的背景可以透明吗?

时间:2013-04-21 19:49:58

标签: macos graphics quartz-2d

我正在使用quartz2d制作我的第一个mac应用程序,我想知道是否可以使背景透明。这意味着,如果所有应用程序都设置了背景透明,那么当它运行时,您将看不到除了它背后的应用程序。

我觉得这是不可能的,但我想我还是会问。

1 个答案:

答案 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。这些覆盖将允许窗口成为键盘   焦点和主要应用程序窗口。

来源: Drawing a custom window on Mac OS X