【问题标题】:How to apply the NSApplicationPresentationOptions to an application?如何将 NSApplicationPresentationOptions 应用于应用程序?
【发布时间】:2019-09-19 04:10:28
【问题描述】:

我试图让应用程序以演示模式启动,同时禁用 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]

但在那之后我完全迷失了。感谢您的任何帮助!

【问题讨论】:

    标签: macos swift cocoa fullscreen


    【解决方案1】:

    假设你有一个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 中的哪一个是执行此操作的最佳位置。视觉上似乎没有区别。

    【讨论】:

    • 谢谢你,我正在为游戏制作这个,所以我正在使用 SKScenes。无论如何,我将代码放入我的 GameScene.swift 文件中进行尝试。它似乎工作正常,但以防万一我想知道是否需要更改某些内容,因为它位于 SKScene 中。再次感谢!
    • @grahamcracker1234 如果这对您有用,那么不要忘记对答案进行投票并将其标记为正确。谢谢!
    • 我知道我只是想仔细检查一下我是否需要更改任何内容。
    【解决方案2】:

    更新了 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 调用它才能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2017-07-01
      相关资源
      最近更新 更多