我有兴趣在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
。有没有办法让视图实际与背景混合,类似于电池菜单栏应用程序?
谢谢!