Cocoa 使用模板图像的HUD按钮

Cocoa 使用模板图像的HUD按钮,cocoa,macos,nsimage,hud,Cocoa,Macos,Nsimage,Hud,我正在我的应用程序中构建一个半透明的浮动HUD窗口,它看起来像快速查看HUD窗口,特别是使用进入/退出全屏图像。Cocoa提供了用于此目的的NSEnterFullScreenTemplate(和NSExitFullScreenTemplate)模板,在带边框的按钮上工作良好 当我移除边框并将按钮放在深色背景上时,它会保持深灰色,并且很难看到。我想把它变成白色,就像快速看一样。有没有一种内置的方法可以做到这一点,或者我必须自己对图像进行缩放和着色吗?我最终编写了一个NSImage category

我正在我的应用程序中构建一个半透明的浮动HUD窗口,它看起来像快速查看HUD窗口,特别是使用进入/退出全屏图像。Cocoa提供了用于此目的的NSEnterFullScreenTemplate(和NSExitFullScreenTemplate)模板,在带边框的按钮上工作良好


当我移除边框并将按钮放在深色背景上时,它会保持深灰色,并且很难看到。我想把它变成白色,就像快速看一样。有没有一种内置的方法可以做到这一点,或者我必须自己对图像进行缩放和着色吗?

我最终编写了一个NSImage category类方法,该方法以所需的大小和颜色返回模板图像(基本上是自己做的,因为我认为API没有提供这样做的方法)

NSBackgroundStyleDark

背景是深色的。
浅色内容与深色背景对比良好。

你能发布一个屏幕截图来说明问题吗?
+(NSImage *)templateImage:(NSString *)templateName
                withColor:(NSColor *)tint
                  andSize:(CGSize)targetSize
{
    NSImage *template = [NSImage imageNamed:templateName];
    NSSize size = (CGSizeEqualToSize(targetSize, CGSizeZero)
                   ? [template size]
                   : targetSize);
    NSRect imageBounds = NSMakeRect(0, 0, size.width, size.height);

    NSImage *copiedImage = [template copy];
    [copiedImage setTemplate:NO];
    [copiedImage setSize:size];

    [copiedImage lockFocus];

    [tint set];
    NSRectFillUsingOperation(imageBounds, NSCompositeSourceAtop);

    [copiedImage unlockFocus];

    return [copiedImage autorelease];
}
[NSCell setBackgroundStyle: NSBackgroundStyleDark]