Cocoa app在所有运行mac的应用程序之上创建透明视图

use*_*814 6 macos xcode cocoa

我正在使用Xcode处理mac osx应用程序.我想在所有应用程序之上添加一个透明的全屏视图/窗口.这样我就可以在透明视图上"绘制",并且它背后将是任何应用程序,safari,word等.

我尝试了以下几点

 NSRect rect = [[NSScreen mainScreen] frame];   //this is full screen size, but still with the status bar like time, battery, etc.

 NSWindow *overlayWindow = [[NSWindow alloc]initWithContentRect:rect
 styleMask:NSBorderlessWindowMask
 backing:NSBackingStoreBuffered
 defer:NO];
 overlayWindow.backgroundColor = [NSColor redColor];
 [self.window addChildWindow:overlayWindow ordered:NSWindowAbove];
Run Code Online (Sandbox Code Playgroud)

这是我的mac应用程序的一个新的全屏子窗口.但它并不是我在我的Mac上运行的所有应用程序之上.

所以我的问题,如何在我的mac屏幕视图上添加视图(不仅是我的应用程序的顶视图).非常感谢!!!

Ken*_*ses 10

请参阅Apple的FunkyOverlayWindow示例代码.除了设置窗口的级别外,还需要将其背景颜色设置为清除并将其设置为非不透明.如果它是透明的,但你仍然希望它接收用于绘图的鼠标事件(而不是让它们传递到它后面的窗口),你需要这样做[window setIgnoresMouseEvents:NO].


Ste*_*cor 4

这看起来像你想要的。

NSWindow- (void)setLevel:(NSInteger)windowLevel

有了这个有用的预定义级别。选择一个你喜欢的。如果您希望其刚好高于或低于这些水平之一,则加或减 1。

#define NSNormalWindowLevel          kCGNormalWindowLevel
#define NSFloatingWindowLevel        kCGFloatingWindowLevel
#define NSSubmenuWindowLevel         kCGTornOffMenuWindowLevel
#define NSTornOffMenuWindowLevel     kCGTornOffMenuWindowLevel
#define NSMainMenuWindowLevel        kCGMainMenuWindowLevel
#define NSStatusWindowLevel          kCGStatusWindowLevel
#define NSModalPanelWindowLevel      kCGModalPanelWindowLevel
#define NSPopUpMenuWindowLevel       kCGPopUpMenuWindowLevel
#define NSScreenSaverWindowLevel     kCGScreenSaverWindowLevel
#define NSDockWindowLevel            kCGDockWindowLevel
Run Code Online (Sandbox Code Playgroud)