+ colorWithPatternImage:应保留Cocoa的透明度

Chr*_*fer 2 cocoa

我有一个NSView用于显示背景颜色的自定义.这有效.但是,我在该图像中有未保留的阴影.

图像的所有透明或半透明区域都呈现为黑色.我该如何解决?

- (void)drawRect:(NSRect)dirtyRect {
    NSColor *pattern = [NSColor colorWithPatternImage:[NSImage imageNamed:@"bg"]];
    [pattern setFill];
    NSRectFill(dirtyRect);
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Rob*_*ger 5

NSRectFill()是一个快捷方式NSRectFillUsingOperation(rect, NSCompositeCopy).这意味着它不会将颜色的alpha通道与背景合成,它只是在传入的矩形中绘制源颜色.相反,您应该使用:

NSRectFillUsingOperation(rect, NSCompositeSourceOver);
Run Code Online (Sandbox Code Playgroud)

NSCompositeSourceOver地方源图像是不透明的,并且目标图像合成别处操作将显示源图像.