我在自定义视图上绘制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/