Xcode 辅助监视器上的全屏显示窗口-Swift
我在Obj C上看到过很多关于这个的帖子。在swift上没有太多,我就是无法让它工作。我想能够使一个特定屏幕上的窗口全屏。“ToggleFullscreen”方法不是最好的方法,因为没有太多选项(用于外部显示)。我试过:Xcode 辅助监视器上的全屏显示窗口-Swift,xcode,swift,fullscreen,Xcode,Swift,Fullscreen,我在Obj C上看到过很多关于这个的帖子。在swift上没有太多,我就是无法让它工作。我想能够使一个特定屏幕上的窗口全屏。“ToggleFullscreen”方法不是最好的方法,因为没有太多选项(用于外部显示)。我试过: // screen is my variable already set outputWindow!.window!.setFrame(screen.frame, display: true, animate: true) outputWindow!.w
// screen is my variable already set
outputWindow!.window!.setFrame(screen.frame, display: true, animate: true)
outputWindow!.window!.styleMask = NSFullScreenWindowMask
outputWindow!.window!.level = Int(CGShieldingWindowLevel())
// the above one doesn't make it fullscreen.
// it has a title bar and shows the menu on the screen.
// then i tried....
fullscreenWindow = NSWindow(contentRect: screen.frame, styleMask:NSBorderlessWindowMask, backing: NSBackingStoreType.Buffered, defer: false, screen: screen)
fullscreenWindow.level = Int(CGShieldingWindowLevel())
fullscreenWindow.makeKeyAndOrderFront(nil)
//that one works on my main display (somewhat). and does nothing on externals.
我在制作自己的全屏时注意到的一件事是,我陷入了其中。它不像OSX的全屏,你可以按esc键退出它。有什么诀窍吗?谢谢我也在全屏上挣扎。其背后的原因是使用
NSBorderlessWindowMask
可防止窗口成为关键帧,无论是否向其发送makekeyandderfront:
或makeyWindow
消息。在Objective-C中,解决方案是在子类NSWindow
中实现canBecomeKeyWindow
- (BOOL)canBecomeKeyWindow {
return YES;
}
现在,它在全屏显示后也会接收关键事件。这是一个伪答案: [在继承的NSWondowController类中]
var fullscreen:Bool {
set {
if newValue == true {
if fullscreen == true {
return
}
frameOrig = self.window?.frame
self.window?.setFrame((NSScreen.main()?.frame)!, display: true)
}
else {
self.window?.setFrame(frameOrig!, display: true)
}
}
get {
return self.window?.frame == NSScreen.main()?.frame
}
}
我还捕获了调用窗口和全屏窗口上的关键事件,并将它们指向上述函数,以便可以进行切换。像这样:
[在某些viewcontroller中]:
override func keyUp(with event: NSEvent) {
switch event.keyCode {
case 53:
debugPrint("ESC - randomviewcontroller")
(randomView.window?.windowController as! RandomWindowController).fullscreen = !(RandomView.window?.windowController as! RandomWindowController).fullscreen;
break
default:
super.keyUp(with: event)
}
}
我认为以上可以做得更好更聪明。。。(一个月前学的斯威夫特…)但俗话说:“它在我的电脑上工作!”
希望能有帮助