App window on top of all windows including others app windows

人盡茶涼 提交于 2020-01-05 07:49:48

问题


I like to have my NSWindow top of everything including other app windows. How this is possible?

This is how my custom NSWindow looks like?

override init(contentRect: NSRect, styleMask style: NSWindow.StyleMask,
              backing backingStoreType: NSWindow.BackingStoreType, defer flag: Bool) {

    super.init(contentRect: contentRect, styleMask: NSWindow.StyleMask.borderless,
               backing: NSWindow.BackingStoreType.buffered, defer: false)

    // Manage window appearance and size
    // this window manages video view controller
    self.backgroundColor = NSColor.clear
    self.alphaValue = CGFloat(AppSingleton.shared.getVideoOpacity()) / 100
    self.isOpaque = false

    self.collectionBehavior = .transient
    }

And this how I open the NSWindowController from a button action

func openPlayerWindow(url: URL) {
    let storyboard:NSStoryboard? = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: Bundle.main)
    let playerWindowController = storyboard?.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "SIPlayerWindowController")) as! PlayerWindowController

    if let playerWindow = playerWindowController.window {
        playerWindowController.showWindow(nil)
        playerWindow.makeKeyAndOrderFront(self)
        NSApp.activate(ignoringOtherApps: true)

        let videoPlayerController = playerWindow.contentViewController as! VideoPlayerViewController
        videoPlayerController.videoFile = url
    }
}

PlayerView.swift

import Cocoa
import AVFoundation

class PlayerView: NSView {

    override func hitTest(_ point: NSPoint) -> NSView? {
        return nil;
    }
}

This PlayerView immediately fill with CorePlayer in this func. VideoViewController.swift

func playVideo(videoFile: URL) {
        corePlayer.view().translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(corePlayer.view())

        NSLayoutConstraint.init(item: corePlayer.view(), attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0).isActive = true
        NSLayoutConstraint.init(item: corePlayer.view(), attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0).isActive = true
        NSLayoutConstraint.init(item: corePlayer.view(), attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1, constant: 0).isActive = true
        NSLayoutConstraint.init(item: corePlayer.view(), attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0).isActive = true

        corePlayer.playURL(videoFile.absoluteURL)
}

回答1:


Try to use this

    self.windowController?.showWindow(nil)
    self.makeKeyAndOrderFront(self)
    NSApp.activate(ignoringOtherApps: true)



回答2:


I found the solution self.ignoresMouseEvents = true;



来源:https://stackoverflow.com/questions/48660129/app-window-on-top-of-all-windows-including-others-app-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!