Xcode 辅助监视器上的全屏显示窗口-Swift

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

我在Obj C上看到过很多关于这个的帖子。在swift上没有太多,我就是无法让它工作。我想能够使一个特定屏幕上的窗口全屏。“ToggleFullscreen”方法不是最好的方法,因为没有太多选项(用于外部显示)。我试过:

    // 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)
    }
}
我认为以上可以做得更好更聪明。。。(一个月前学的斯威夫特…)但俗话说:“它在我的电脑上工作!”

希望能有帮助