在Mac OS X(Lion)上创建全屏叠加层的最优雅方式是什么?

tam*_*gal 10 cocoa overlay appkit nswindow

我正在寻找在Mac OS X下创建全屏叠加层的"最佳"方式.我想创建一个透明或半透明的叠加层,它关注鼠标事件并显示其他输入/输出元素.

此叠加层应高于所有其他GUI项(如CMD-Tab叠加层).

你知道如何有效地做到这一点吗?目前我正在玩这种代码:

int windowLevel = CGShieldingWindowLevel();
NSRect windowRect = [[NSScreen mainScreen] frame];
NSWindow *overlayWindow = [[NSWindow alloc] initWithContentRect:windowRect
                                          styleMask:NSBorderlessWindowMask
                                            backing:NSBackingStoreBuffered
                                              defer:NO
                                             screen:[NSScreen mainScreen]];

[overlayWindow setReleasedWhenClosed:YES];
[overlayWindow setLevel:windowLevel];
[overlayWindow setBackgroundColor:[NSColor colorWithCalibratedRed:0.0
                                                          green:0.0
                                                           blue:0.0
                                                          alpha:0.5]];
[overlayWindow setAlphaValue:1.0];
[overlayWindow setOpaque:NO];
[overlayWindow setIgnoresMouseEvents:NO];
[overlayWindow makeKeyAndOrderFront:nil];
Run Code Online (Sandbox Code Playgroud)

...它工作正常,但我没有选择启动任何类型的动画,如缓慢增加透明度(慢慢调暗屏幕)等.

虽然我不明白如何将此窗口置于后台,但不释放它并让它不时弹出.

那么有更好或"标准"的方法吗?

Pet*_*sey 6

您可以使用NSViewAnimation.是的,它也适用于Windows.

您的动画目标应该是窗口,其效果应该是淡入或淡出,具体取决于您是显示还是隐藏它.省略框架键,因为您可能不想移动窗口或调整窗口大小.

当然,你应该忽略这个makeKeyAndOrderFront:消息,因为你将以淡入效果命名它.

  • @septi:不是叠加,不是.在相关窗口级别创建全屏无边框窗口是这样做的方法. (2认同)