【问题标题】:How can I create a window with transparent background with swift on osx?如何在 osx 上使用 swift 创建具有透明背景的窗口?
【发布时间】:2015-12-30 14:07:40
【问题描述】:

我想在我的 mac 上创建一个 osx/cocoa 应用程序,它做的事情非常简单:在我的 mac 上显示一个文本字符串,没有背景。最终这将是一个计时器,它显示为覆盖在其他窗口之上,而不会太打扰。

我尝试在applicationDidFinishLaunching 中设置window.backgroundColor = NSColor(red: 1.0, green:0.5, blue:0.5, alpha: 0.5)(参见alpha 为0.5),但这并没有将其变成远程透明的东西。

有哪位好心人愿意建议一种方法来做到这一点?

【问题讨论】:

标签: swift macos cocoa


【解决方案1】:

NSWindow 有一个属性'opaque',默认为真。

当窗口不透明时,该属性的值为真; 否则为假。

改成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)
}

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) 
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • @sagism 如果这个答案比我晚了 3 小时发布,为什么会被标记为正确?
    • @LeoDabus:简单地将窗口的opacity 设置为false 不足以获得sagism 之后的效果(我试过了);您还需要更改背景颜色。
    • 考虑到颜色已经将 alpha 设置为 0.5,window.backgroundColor = NSColor(red: 1.0, green:0.5, blue:0.5, alpha: 0.5) 所以它已经具有透明度,所以这是不正确的。如果他想要完全透明,他需要做的就是用任何颜色将 alpha 设置为 0.0
    • @LeoDabus 对不起,我的错,我认为最近的答案会显示在顶部,所以我认为我正在接受第一个。刚刚更正了。
    【解决方案3】:

    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
    
    
            
            
        }
        
    

    【讨论】:

      【解决方案4】:

      斯威夫特 3/4

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

      【讨论】:

        猜你喜欢
        • 2012-05-03
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 2011-12-02
        相关资源
        最近更新 更多