【问题标题】:HUD Buttons using Template Images使用模板图像的 HUD 按钮
【发布时间】:2011-09-08 09:35:31
【问题描述】:
我正在我的应用程序中构建一个半透明的浮动 HUD 窗口,它看起来像 Quick Look HUD 窗口,特别是使用进入/退出全屏图像。 Cocoa 提供了 NSEnterFullScreenTemplate(和 NSExitFullScreenTemplate)模板,用于此目的,并且可以在有边框的按钮上正常工作。
当我移除边框并将按钮放在深色背景上时,它会保持深灰色,并且很难看到。我想让它变成白色,就像在 Quick Look 中一样。有没有内置的方法可以做到这一点,还是我必须自己对图像进行缩放和着色?
【问题讨论】:
标签:
cocoa
macos
nsimage
hud
【解决方案1】:
我最终编写了一个 NSImage 类别类方法,该方法返回所需大小和所需颜色的模板图像(基本上是我自己做的,因为我不认为 API 确实提供了这样做的方法)。
+(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];
}
【解决方案2】:
[NSCell setBackgroundStyle: NSBackgroundStyleDark]
NSBackgroundStyleDark
背景是深色。
浅色内容与深色背景形成鲜明对比。