Objective c 带有半透明背景的自定义按钮

Objective c 带有半透明背景的自定义按钮,objective-c,xcode,macos,nsbutton,Objective C,Xcode,Macos,Nsbutton,我正在尝试创建一个自定义的NSButton,它有50%不透明的黑色背景和白色文本。为此,我对NSButton进行了子类化,并重载了DrawRect: - (void) drawRect:(NSRect)dirtyRect { [self setBordered:NO]; //REMED since it has same effect as NSRectFill below //[[self cell] setBackgroundColor:[NSColor colo

我正在尝试创建一个自定义的NSButton,它有50%不透明的黑色背景和白色文本。为此,我对NSButton进行了子类化,并重载了DrawRect:

- (void) drawRect:(NSRect)dirtyRect
{

    [self setBordered:NO];

    //REMED since it has same effect as NSRectFill below
    //[[self cell] setBackgroundColor:[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.2]];

    NSColor* backgroundColor = [NSColor colorWithCalibratedWhite:0 alpha:0.3f];
    [backgroundColor setFill];
    NSRectFill(dirtyRect);

    [super drawRect:dirtyRect];
}
白色文本显示良好,但按钮的背景始终为100%不透明。不会解释alpha值


有什么想法吗?谢谢

NSRectFill()的默认操作是复制,这不是您想要的。换成

NSRectFillUsingOperation(dirtyRect, NSCompositeSourceAtop);

我发现的另一个解决方案是保持代码不变,但在Interface Builder中为每个按钮打开核心动画层。我对核心动画层了解不够,不知道为什么会这样。我之前关闭了CAL,因为它使我的字体看起来非常参差不齐。

这很有效!尽管我必须关闭Interface Builder中按钮上的核心动画层。