当使用带有Alpha的NSColor时,drawSwatchInRect绘制对角线

时间:2012-04-25 05:25:16

标签: objective-c drawing nstableview nscolor nsrect

我正试图在我的TableView中绘制一个透明的高亮颜色:

if ([self isSelected]){
    self.alphaValue = 0.5f;
    NSColor * fillColor = [NSColor colorWithCalibratedRed: 100.0f/256.0f 
                                                    green: 100.0f/256.0f 
                                                     blue: 100.0f/256.0f 
                                                    alpha: 0.5];


    [fillColor drawSwatchInRect:dirtyRect];

}

它绘制了一些奇怪的东西,原始颜色和新的alpha颜色之间的数字线。我知道解决方案可能非常简单 - 但我似乎无法弄清楚它是什么。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为这正是drawSwatchInRect:的目的。当您有任何alpha值时,样本将显示与黑色(左上角)和白色(右下角)合成时颜色的外观。只要Apple UI组件显示颜色,他们就会这样做。如果你使用的颜色不是灰色,那就更明显了。

Color swatches with varying opacity

如果要填充具有特定颜色的矩形,请让背景显示,请尝试:

[fillColor set];
NSBezierPath *rectPath = [NSBezierPath bezierPathWithRect:dirtyRect];
[rectPath fill];

虽然这适用于填充的rects,但请注意dirtyRect并不总是相同的形状。对于大多数绘图,您希望使用正在绘制的视图的bounds