LoginSignup
10
5

More than 3 years have passed since last update.

他アプリのフルスクリーン上にウインドウを表示する

Last updated at Posted at 2019-10-10

Macアプリで他のアプリが表示しているフルスクリーンスペース上にウインドウを表示する方法を記載します。

結論から書くと下記の3つが適切に設定されていれば表示できます。

  • NSPanel
  • NSWindow.StyleMask
  • NSWindow.CollectionBehavior

環境:
* macOS10.14.6
* Xcode10.1

let rect = NSRect(x: 100, y: 100, width: 300, height: 200)
let styleMask: NSWindow.StyleMask = [.titled, .nonactivatingPanel]
let window = NSPanel(contentRect: rect, styleMask: styleMask, backing: .buffered, defer: true)
window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
window.makeKeyAndOrderFront(nil)

NSPanel

NSWindowのサブクラスとして定義されています。
iOSでは聞きなれないクラス名ですがmacOSでは昔からあって、用途はメインウィンドウに付属させるサブパネルのような表示に用います。
今や滅多に使いませんが。

let window = NSPanel(contentRect: rect, styleMask: styleMask, backing: .buffered, defer: true)

NSWindowと同じように初期化して使います。Storyboardで生成してもOKです。

NSWindow.StyleMask

ウインドウの表示スタイルです。

let styleMask: NSWindow.StyleMask = [.titled, .nonactivatingPanel]

.nonactivatingPanel
これが必要になります。
アプリをアクティブ化しない付属パネルのような挙動になり、他のアプリのフルスクリーンスペース上に表示できるようになります。

NSWindow.CollectionBehavior

ウインドウの挙動を指定できます。

window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]

.canJoinAllSpaces
全てのスペースに表示できます。メニューバーなどがこのスタイルです。

.fullScreenAuxiliary
フルスクリーンウインドウと同じスペースに表示できます。

結果

Safariのフルスクリーンウインドウ上に表示。
window_on_fullscreen.png

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5