web-dev-qa-db-fra.com

Comment créer une fenêtre à fond transparent avec Swift sur osx?

Je souhaite créer une application osx/cacoa sur mon mac, ce qui fait quelque chose de très simple: afficher une chaîne de texte sur mon mac, sans arrière-plan. En fin de compte, ce sera une minuterie qui s'affichera comme une superposition au-dessus des autres fenêtres, sans être trop intrusive.

J'ai essayé de régler window.backgroundColor = NSColor(red: 1.0, green:0.5, blue:0.5, alpha: 0.5) (voir l'alpha est 0.5), dans applicationDidFinishLaunching, mais cela ne le transforme pas en quelque chose de transparent à distance.

Toute bonne âme veut-elle suggérer un moyen de le faire?

13
sagism

NSWindow a une propriété 'opaque' qui est vraie par défaut. 

La valeur de cette propriété est true lorsque la fenêtre est opaque; Sinon, false.

Il suffit de le changer en faux:

window.opaque = false
window.backgroundColor = NSColor(red: 1, green: 0.5, blue: 0.5, alpha: 0.5)

Mise à jour de Swift 4: opaque a été renommé isOpaque

window.isOpaque = false
window.backgroundColor = NSColor(red: 1, green: 0.5, blue: 0.5, alpha: 0.5)
6
Leo Dabus

Rendre la fenêtre non opaque et lui donner un fond clair:

func applicationDidFinishLaunching(aNotification: NSNotification) {
    window.opaque = false
    window.backgroundColor = NSColor.clearColor()
}
12
Paul Patterson

Une petite mise à jour pour Swift 3

Un exemple de sous-classe de fenêtre avec commentaire:

class customWindow: NSWindow {

    override init(contentRect: NSRect, styleMask style: NSWindowStyleMask, backing bufferingType: NSBackingStoreType, defer flag: Bool) {
        super.init(contentRect: contentRect, styleMask: style, backing: bufferingType, defer: flag)

        // Set the opaque value off,remove shadows and fill the window with clear (transparent)
        self.isOpaque = false
        self.hasShadow = false
        self.backgroundColor = NSColor.clear

        // Change the title bar appereance
        self.title = "My Custom Title"
        //self.titleVisibility = .hidden
        self.titlebarAppearsTransparent = true




    }
3
Akelian

Swift 3/4

self.window?.isOpaque = false
self.window?.hasShadow = false
self.window?.backgroundColor = NSColor.clear
self.window?.titlebarAppearsTransparent = true
1
Jay Mehta