如何将 NSApplicationPresentationOptions 应用于应用程序?

How to apply the NSApplicationPresentationOptions to an application?

我试图让应用程序以演示模式启动,同时禁用 Dock、菜单栏、进程切换等。我为这些设置设置了变量,但现在我不知道如何实际应用这些设置到应用程序。这是我到目前为止的代码:

let presOptions: NSApplicationPresentationOptions = [
        .HideDock                  ,   // Dock is entirely unavailable. Spotlight menu is disabled.
    //  .AutoHideMenuBar           ,   // Menu Bar appears when moused to.
    //  .DisableAppleMenu          ,   // All Apple menu items are disabled.
        .DisableProcessSwitching   ,   // Cmd+Tab UI is disabled. All Exposé functionality is also disabled.
        .DisableForceQuit          ,   // Cmd+Opt+Esc panel is disabled.
        .DisableSessionTermination ,   // PowerKey panel and Restart/Shut Down/Log Out are disabled.
        .DisableHideApplication    ,   // Application "Hide" menu item is disabled.
    //  .AutoHideToolbar           ,
        .FullScreen
]

我相信后面的那行是:

let optionsDictionary = [NSFullScreenModeApplicationPresentationOptions: presOptions]

但在那之后我完全迷路了。谢谢任何帮助,我们将不胜感激!

假设你有一个 NSWindow 和一个 NSViewController,你可以这样做:

class ViewController: NSViewController {
    override func viewWillAppear() {
        let presentationOptions: NSApplicationPresentationOptions = [
                .HideDock                  ,   // Dock is entirely unavailable. Spotlight menu is disabled.
                .DisableProcessSwitching   ,   // Cmd+Tab UI is disabled. All Exposé functionality is also disabled.
                .DisableForceQuit          ,   // Cmd+Opt+Esc panel is disabled.
                .DisableSessionTermination ,   // PowerKey panel and Restart/Shut Down/Log Out are disabled.
                .DisableHideApplication    ,   // Application "Hide" menu item is disabled.
                .FullScreen
        ]

        if let screen = NSScreen.mainScreen() {
            view.enterFullScreenMode(screen,
                withOptions: [NSFullScreenModeApplicationPresentationOptions:
                    NSNumber(unsignedLong: presentationOptions.rawValue)])
        }
    }
}

尚不完全清楚 viewDidAppearviewWillAppear 中哪一个是执行此操作的最佳位置。视觉上似乎没有什么区别。

Stefan Arentz 对 Swift 4.2

的回答更新了代码
let presentationOptions: NSApplication.PresentationOptions = [
        .hideDock                  ,   // Dock is entirely unavailable. Spotlight menu is disabled.
        .disableProcessSwitching   ,   // Cmd+Tab UI is disabled. All Exposé functionality is also disabled.
        .disableForceQuit          ,   // Cmd+Opt+Esc panel is disabled.
        .disableSessionTermination ,   // PowerKey panel and Restart/Shut Down/Log Out are disabled.
        .disableHideApplication    ,   // Application "Hide" menu item is disabled.
        .fullScreen
    ]

view.enterFullScreenMode(screen, withOptions: [NSView.FullScreenModeOptionKey.fullScreenModeApplicationPresentationOptions:presentationOptions.rawValue])

此外,对我来说,只有从 applicationDidBecomeActive 调用它才能正常工作。