0

我正在为我的应用程序实现选项卡。一切都运行良好,除了当窗口退出主状态时我无法弄清楚如何以较浅的灰色阴影绘制选项卡。我成功接收到 NSWindowDidBecomeMainNotification 并重新绘制标签栏,但我不确定如何计算标签的新灰色。我目前正在使用所有绘图的图像。我尝试在整个标签栏上方绘制一个半透明图层以使其更轻,但它似乎不起作用。我可能可以为我使用的每个图像设置一个不透明度值,但这似乎不太理想。我在 Apple 文档中也找不到任何关于此的信息。在这种情况下,最佳做法是什么?

4

3 回答 3

2

您可以做的是让选项卡在代码中绘制,然后根本不绘制背景。让窗口的背景(活动或非活动)显示出来。

您还可以考虑切换到PSMTabBarControl,这是一个已编写并在多个应用程序中使用的可重用选项卡栏类。(而且我假设您已将 NSTabView 视为不是您想要的外观。)

于 2010-01-01T14:35:33.207 回答
0

我做非​​活动控件的方法是在我的图形程序(Photoshop 或 Illustrator)中渲染同一图形的非活动状态版本,并在需要时绘制非活动版本。如果绘制 50% 透明版本的活动图像,则需要先用背景颜色擦除。

于 2010-01-01T07:08:28.003 回答
0

您可以尝试使用半透明蒙版绘制图像。我通常使用的代码只是简单地绘制一个图像,然后使用 Quartz 的透明层功能在图像的实际边界上填充一个矩形。我将其作为 NSImage 上的一个类别:

@implementation NSImage (ShadedImageAddition)
- (void)drawAtPoint:(NSPoint)point shadeWithColor:(NSColor *)color intensity:(CGFloat)alpha
{
    NSRect imageRect;
    CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];

    imageRect.origin = point;
    imageRect.size = [self size];

    CGContextBeginTransparencyLayerWithRect(context, NSRectToCGRect(imageRect), NULL);

    [self drawInRect:imageRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
    [[color colorWithAlphaComponent:alpha] setFill];
    NSRectFillUsingOperation(imageRect, NSCompositeSourceAtop);

    CGContextEndTransparencyLayer(context);
}
@end

然后当要在非关键窗口中绘制图像时,我通常会在其上绘制 50% 的白色蒙版。当然,您必须选择适合您的位图的颜色和 alpha 值。

[myImage drawAtPoint:NSZeroPoint shadeWithColor:[NSColor whiteColor] intensity:0.50];
于 2010-01-02T05:40:32.243 回答