NSWindow在桌面图标上绘制

时间:2011-08-23 17:47:14

标签: objective-c cocoa macos desktop nswindow

我正在编写一个应用程序,希望在桌面图标(Mac OSX 10.7 Lion)之上绘制基本的NSWindow。

NSWindow *systemInfoWindow  = [[NSWindow alloc] initWithContentRect:frame
                                                 styleMask:NSBorderlessWindowMask
                                                   backing:NSBackingStoreBuffered
                                                     defer:NO];
systemInfoWindow.delegate = self;
[systemInfoWindow setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];

[systemInfoWindow setBackgroundColor:backgroundColorSpace];
[systemInfoWindow makeKeyAndOrderFront:NSApp];
[systemInfoWindow setLevel:kCGDesktopIconWindowLevel];

这部分代码效果很好,NSWindow可以在图标之上绘制。 但如果我在两个空格之间切换,我的NSWindow会留在图标后面。

/ * ===更新=== * / 我觉得我的窗口水平有问题。为了更好地理解,我上传了两个截图。 空间1 - 窗口保持在我想要的图标之上 http://dl.dropbox.com/u/1503795/Space1.png

Space 2 - 窗口位于桌面图标后面。他们也应该保持领先 http://dl.dropbox.com/u/1503795/Space2.png

我发现了另一个问题。如果我激活了应用程序并保留在第一个空间中,一切看起来都像我的第一个截图。如果我选择桌面上的文件,窗口也会跳到后面: 抱歉,无法发布其他屏幕截图

我希望我的问题更容易理解。

我不知道如何解决这个问题。有人有想法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

您可能需要注册空间更改通知:

NSNotificationCenter* nc = [[NSWorkspace sharedWorkspace] notificationCenter];
[nc addObserver:self 
    selector:@selector(activeSpaceDidChange:) 
    name:NSWorkspaceActiveSpaceDidChangeNotification 
    object:nil];

然后,您可以回复通知并更新您的窗口:

- (void) activeSpaceDidChange:(NSNotification*)aNotification 
{
    [[self window] orderFront:self];
}