gpt4 book ai didi

objective-c - 如何以编程方式将 NSWindow 移动到 MacOS Sierra 中的另一个屏幕

转载 作者:搜寻专家 更新时间:2023-10-30 20:14:05 26 4
gpt4 key购买 nike

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

我真的不明白为什么这这么难,但我已经尝试了几乎所有我能想到的方法,包括我在 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) 不起作用我最终在主屏幕上看到一个奇怪的 float 窗口。如果我在主屏幕上进入 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) - 这似乎在我的一台计算机上工作,但在另一台计算机上它在另一个空间运行应用程序但从未将该空间设置为可见。

最佳答案

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

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

引用: https://developer.apple.com/documentation/appkit/nsview/1483283-setframeorigin


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

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

关于objective-c - 如何以编程方式将 NSWindow 移动到 MacOS Sierra 中的另一个屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40418678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com