我在自定义视图上绘制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“
      )>无法转换为色彩空间通用RGB色彩空间


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

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

编辑:

如果我这样定义_color

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


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

最佳答案

NSGradient不适用于作为颜色之一的图案。那就是异常告诉你的。它仅适用于可以转换为RGB颜色的NSColor。如果要使图案淡入淡出,则必须采用另一种方式。

关于objective-c - NSImage + imageWithPatternColor:和NSGradient- cocoa /Mac,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8674966/

10-09 04:31