我正在尝试使用NSWindow
的{{1}}属性检测isVisible
是打开还是关闭,但它无法正常工作。例如,我覆盖了NSWindow
的{{1}}方法(我需要在扩展屏幕上显示全屏网页):
loadWindow
KeyWindow:
NSWindowController
但是debugPrint显示override func loadWindow() {
self.contentController = WKUserContentController();
guard let contentController = self.contentController else {
return
}
let config = WKWebViewConfiguration()
config.userContentController = contentController
let externalScreens = NSScreen.externalScreens()
let screen = externalScreens.count == 0 ? NSScreen.main()! : externalScreens[0]
window = KeyWindow(
contentRect: NSRect(x: 0, y: 0, width: screen.frame.width, height: screen.frame.height),
styleMask: NSBorderlessWindowMask,
backing: NSBackingStoreType.buffered,
defer: false,
screen: screen
)
if let w = window {
w.level = Int(CGShieldingWindowLevel())
w.backgroundColor = NSColor.black
w.makeKeyAndOrderFront(self)
w.makeFirstResponder(self)
webView = WKWebView(frame: w.frame, configuration: config)
w.contentView = webView!
debugPrint("Window is visible = \(w.isVisible)")
}
}
属性设置为true,尽管窗口尚未打开(控制器的import Foundation
import AppKit
class KeyWindow : NSWindow {
override var canBecomeKey: Bool {
return true
}
}
方法尚未调用)。
如何可靠地找出窗口是否打开(显示在屏幕上)?
答案 0 :(得分:0)
代码
if let w = window {
w.level = Int(CGShieldingWindowLevel())
w.backgroundColor = NSColor.black
w.makeKeyAndOrderFront(self)
w.makeFirstResponder(self)
webView = WKWebView(frame: w.frame, configuration: config)
w.contentView = webView!
debugPrint("Window is visible = \(w.isVisible)")
}
你在检查前打电话给w.makeKeyAndOrderFront(self)
根据{{3}}:
func makeKeyAndOrderFront(Any?)将窗口移动到前面 屏幕列表,在其级别内,并使其成为关键窗口;那是, 它显示了窗口。
从技术上讲,isVisible
的工作方式与宣传的一样:)
Apple documentation
当窗口在屏幕上时,此属性的值为true(偶数 如果它被其他窗户遮挡了);否则,错误。
你的窗口应该在屏幕上 - 尽管你已将它设置为CGShieldingWindowLevel
它可能只是因为呼叫而无法看见
w.makeKeyAndOrderFront(self)
您可以尝试致电func orderFrontRegardless()
在这种情况下,它应立即显示窗口 - 但我认为这是另一个SO问题