3

我们的应用程序需要覆盖到全屏。使用常规全屏(浏览器 Flash 全屏,如 Prezi 或 Youtube)它可以工作,但使用本机全屏(Lion 全屏、全屏模式、其他空间)它不会...

问题是,如何强制窗口显示在全屏模式和 KeyNote 全屏模式?

示例应用程序:
_window 是一个 NSWindow(NSPanel 也不起作用)

- (void) activeSpaceDidChange:(NSNotification *)aNotification {
        if ([_window isVisible] && ![_window isOnActiveSpace])
            [_window orderOut:self];

        [_window setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorFullScreenAuxiliary];
        [_window makeKeyAndOrderFront:self];
        [_window setCollectionBehavior:NSWindowCollectionBehaviorMoveToActiveSpace | NSWindowCollectionBehaviorFullScreenAuxiliary];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{        
    [_window setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorFullScreenAuxiliary];

    [_window orderFrontRegardless];
    [_window setLevel:NSStatusWindowLevel];
    [_window setHidesOnDeactivate: NO];

    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(activeSpaceDidChange:) name:NSWorkspaceActiveSpaceDidChangeNotification object:nil];
}

编辑:

现在使用 Tyler 的代码片段,面板可以在全屏模式下工作,但不幸的是不能在 KeyNote 全屏下工作。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [_window setStyleMask:NSUtilityWindowMask | NSNonactivatingPanelMask];
    [_window setLevel:NSFloatingWindowLevel];
    [_window setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
}
4

1 回答 1

4

您不应该要求“activeSpaceDidChange”通知行,它似乎确实需要是一个 NSPanel。在您的 applicationDidFinishLaunching 中,只需执行以下操作即可:

[_window setStyleMask:NSUtilityWindowMask | NSNonactivatingPanelMask];
[_window setLevel:NSFloatingWindowLevel];
[_window setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
于 2013-11-19T13:24:01.143 回答