다른 앱의 전체 화면에 창 표시

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의 전체 화면 창에 표시.

    좋은 웹페이지 즐겨찾기