在NSStatusBarButton中使用CALayer

时间:2017-03-14 07:20:16

标签: swift macos cocoa core-animation calayer

我有兴趣在NSStatusBarButton中绘制自定义内容,类似于内置电池菜单栏应用程序:

由于绘制自定义内容的灵活性,我想使用CALayer。我已经设法使用以下代码向按钮添加了一个支持图层的NSView:

// StatusView

class StatusView: NSView {

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        self.wantsLayer = true
    }

    override var wantsUpdateLayer: Bool {
        return true
    }

    override func updateLayer() {
        if let layer = self.layer {
            layer.backgroundColor = NSColor.clear.cgColor

            // Code adding text layer...
        }
    }

}

// MenuController

class StatusMenuController: NSObject {
    override func awakeFromNib() {
        if let button = statusItem.button {
            layerView.frame = NSRect(x: 0.0, y: 0.0, width: len / 2, height: button.bounds.height)
            button.addSubview(layerView)
        }
    }
}

基本上我将一个CALayer添加到NSStatusBarButton的按钮,它看起来很正常,但是当你点击菜单项时似乎有一个不透明的背景:

我已将CALayer的背景颜色设置为透明,并且图层视图的isOpaque属性为false。有没有办法让视图实际与背景混合,类似于电池菜单栏应用程序?

谢谢!

0 个答案:

没有答案