2016-11-04 14 views
2

2番目のモニタで起動し、ビデオを再生して終了するフルスクリーンビデオプレーヤーを作成しようとしています。MacOS SierraでNSWindowを別の画面にプログラムで移動する方法

なぜこれがなぜ難しいのかわかりませんが、私は考えることができるほとんどすべてを試しました。私は、窓の移動や全画面表示のための答えを見つけました。

1)ウィンドウ枠を2番目の画面のフレームに設定しても、確実に移動されません。

など。

if let screen = NSScreen.screens()?[1] { 
     let frame = screen.frame 
     window.setFrame(frame, display: true, animate: true) 
    } 

ウィンドウを2番目の画面に移動することも、移動しないこともできます。 animate:falseを設定した場合、それは決して行いません。

2)self.view.enterFullScreenMode(secondScreen、withOptions:options)を実行していない2)メイン画面上に奇妙なフローティングウィンドウが表示されてしまいます。メイン画面で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例えばを使用して私の作品

+0

どのようにあなたのウィンドウを作成していますか?それは 'フルスクリーン'フラグが設定されていますか?ボーダーレスに設定されていますか?あなたはそれに対してどのようなウィンドウレベルを与えましたか?サイズ変更可能に設定されていますか? – uliwitness

答えて

0

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

参考:フルスクリーンモードで設定画面について https://developer.apple.com/documentation/appkit/nsview/1483283-setframeorigin


。あなたがそれを(私が思うように)見ているなら、あなたはこれを試すことができます:

override func viewDidAppear() { 
     super.viewDidAppear() 
     self.view.window?.styleMask.insert(.fullScreen) 
     self.view.window?.styleMask.insert(.fullSizeContentView) 
     self.view.window?.level = Int(CGWindowLevelForKey(.maximumWindow)) 
    } 
関連する問題