2

我正在绘制一个NSGradient像这样的自定义视图:

- (void)drawRect: (NSRect)dirtyRect
{
    NSGradient* g = [[NSGradient alloc] initWithStartingColor: _color endingColor: [NSColor clearColor]];   
    [g drawInRect: [self bounds] angle: 90];
}

_color例如,如果是正常颜色,[NSColor blueColor]则一切正常。问题是_color来自一个图案图像(在这种情况下,它大部分是灰色的,上面有一些花哨的像素),当这种情况发生时,程序会不断记录这个错误:

*** -[NSGradient initWithColors:atLocations:colorSpace:]: 颜色 NSPatternColorSpace CGImageSource=0x400367d60" )> 无法转换为颜色空间 Generic RGB 颜色空间

_color = [NSColor colorWithPatternImage: [NSImage imageNamed: @"mainBG.png"]]

该图像完全不透明,是一个 png 文件。有任何想法吗?也许我应该更改文件类型?我不知道...

编辑:

如果我_color这样定义:

_color = [[NSColor colorWithPatternImage: [NSImage imageNamed: @"mainBG.tiff"]] colorUsingColorSpace: [NSColorSpace genericRGBColorSpace]]

然后不显示渐变。没有。就像我没有drawRect:方法一样。有任何想法吗?

4

1 回答 1

1

NSGradient 不适用于将图案作为其中一种颜色。这就是异常告诉你的。它仅适用于可以转换为 RGB 颜色的 NSColor。如果你想让你的图案淡化到清晰,你必须用另一种方式来做。

于 2012-04-10T23:19:13.283 回答