【问题标题】:How can I programmatically move a NSWindow to another screen in MacOS Sierra如何以编程方式将 NSWindow 移动到 MacOS Sierra 中的另一个屏幕
【发布时间】:2020-03-07 14:25:52
【问题描述】:

我正在尝试制作一个在第二台显示器上启动、播放视频然后退出的全屏视频播放器。

我真的不明白为什么这这么难,但我几乎尝试了所有我能想到的东西,包括我在 SO 上的任何答案中找到的与移动窗口或使其全屏有关的所有内容。

1) 将窗口框架设置为第二个屏幕的框架并不能可靠地移动它。

例如

    if let screen = NSScreen.screens()?[1] {
        let frame = screen.frame
        window.setFrame(frame, display: true, animate: true)
    }

可能会也可能不会将窗口移动到第二个屏幕。如果我设置 animate: false,它永远不会。

2) 执行 self.view.enterFullScreenMode(secondScreen, withOptions: options) 不起作用我最终在主屏幕上出现了一个奇怪的浮动窗口。如果我确实在主屏幕上进入 fullScreenMode,它将完美地全屏。

    if let screen = NSScreen.screens()?[1] {

        let presOptions:NSApplicationPresentationOptions = [
            .fullScreen,
            .hideDock,
            .hideMenuBar,
            .autoHideToolbar
        ]

        self.view.enterFullScreenMode(screen, withOptions: [NSFullScreenModeApplicationPresentationOptions: presOptions,
                                                            NSFullScreenModeAllScreens: false])
    }

有人知道我到底做错了什么吗?

我还在 applicationDidFinishLaunching 中尝试了 window.toggleFullScreen(nil) - 这似乎可以在我的一台计算机上运行,​​但在另一台计算机上它在另一个空间中运行应用程序,但从未将该空间设置为可见。

【问题讨论】:

  • 你是如何创建你的窗口的?它是否设置了“全屏”标志?是否设置为无边界?你给它的窗位是多少?是否设置为可调整大小?

标签: objective-c macos cocoa swift3 fullscreen


【解决方案1】:

仅使用 setFrameOrigin 对我有用,例如:

if let screen = NSScreen.screens()?[1] {
     window.setFrameOrigin(screen.visibleFrame.origin)
}    

参考: https://developer.apple.com/documentation/appkit/nsview/1483283-setframeorigin


关于全屏模式下的设置窗口。如果您是从视图中进行操作(如我所想),您可以试试这个:

override func viewDidAppear() {
        super.viewDidAppear()
        self.view.window?.styleMask.insert(.fullScreen)
        self.view.window?.styleMask.insert(.fullSizeContentView)
        self.view.window?.level = Int(CGWindowLevelForKey(.maximumWindow))
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多