のisVisible
プロパティを使用してNSWindow
が開いているか閉じているかを検出しようとしていますが、期待通りに動作しません。たとえば、私はのloadWindow
方法をオーバーライド私のNSWindowController
(私は、拡張された画面上でフルスクリーンのウェブを表示する必要があります):NSWindowのisVisibleプロパティがtrueに設定されています
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)")
}
}
KeyWindow:
import Foundation
import AppKit
class KeyWindow : NSWindow {
override var canBecomeKey: Bool {
return true
}
}
しかしdebugPrintはisVisible
プロパティがtrueに設定されていることを示しています窓はまだ開かれていませんでしたが(self.showWindow(self)
コントローラの方法はまだ呼び出されていませんでした)。
ウィンドウが開いている(画面に表示されている)かどうかを確実に確認するにはどうすればよいですか?あなたのコード内
'w.makeKeyAndOrderFront(self)'は実際にウィンドウ – ColdSteel
hmを "開く"べきであるが、そうではない私が 'showWindow'を呼び出すまで画面上に表示されます –
私はここであなたの問題だと思っています:-)あなたはshieldWindowLevelを使用しています、これはおそらく別のshieldWindowlevelで覆われていますか? '[w makeKeyWindow];を呼び出そうとしています。 – ColdSteel