如何在osx上创建一个带有swift透明背景的窗口?

sag*_*ism 15 macos cocoa swift

我想在我的mac上创建一个osx/cocoa应用程序,它做了一件非常简单的事情:在我的mac上显示一个没有背景的文本字符串.最终,这将是一个计时器,在其他窗口的顶部显示为叠加,而不会过于干扰.

我试过设置window.backgroundColor = NSColor(red: 1.0, green:0.5, blue:0.5, alpha: 0.5)(参见alpha是0.5),applicationDidFinishLaunching但这并没有把它变成远程透明的东西.

任何好的灵魂都想建议一种方法来做到这一点?

Pau*_*son 12

使窗口不透明,并给它一个清晰的背景:

func applicationDidFinishLaunching(aNotification: NSNotification) {
    window.opaque = false
    window.backgroundColor = NSColor.clearColor()
}
Run Code Online (Sandbox Code Playgroud)

  • @LeoDabus 对不起,我的错,我认为最近的答案出现在顶部,所以我以为我接受了第一个。刚刚纠正了这一点。 (3认同)

Leo*_*bus 10

NSWindow有一个属性'opaque',默认情况下是真的.

当窗口不透明时,此属性的值为true; 否则,错误.

只需将其更改为false:

override func viewWillAppear() {
    super.viewWillAppear()
    view.window?.opaque = false
    view.window?.backgroundColor = NSColor(red: 1, green: 0.5, blue: 0.5, alpha: 0.5)
}
Run Code Online (Sandbox Code Playgroud)

Swift 4更新: opaque已重命名为isOpaque

override func viewWillAppear() {
    super.viewWillAppear()
    view.window?.isOpaque = false
    view.window?.backgroundColor = NSColor(red: 1, green: 0.5, blue: 0.5, alpha: 0.5) 
}
Run Code Online (Sandbox Code Playgroud)


Ake*_*ian 5

Swift 3 的一些更新

带有注释的窗口子类示例:

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


        
        
    }
    
Run Code Online (Sandbox Code Playgroud)