比较OSX和iOS的两个节点的SKColor?

时间:2014-04-18 12:35:34

标签: ios macos sprite-kit nscolorspace

我正在通过使用换行符\n来处理a subclass of SKLabelNode allowing line-breaks。它正在顺利进行,我目前正在准备它以适用于OSX以及iOS,然后再准备podspec。

从表面上看,它似乎正在运行,但是在为OSX构建时,我的一个测试失败了,尽管通过了iOS。它在某种程度上NSColorSpace相关,但对我来说这是一个未知的领域。这是类中将颜色复制到子节点的方法:

- (void)setFontColor:(SKColor *)fontColor{
    [super setFontColor: fontColor];
    self.propertyStateholderNode.fontColor    = fontColor;
    for (SKLabelNode *subNode in self.subNodes) {
        subNode.fontColor    = fontColor;
    }
    _fontColor    = fontColor;
}

这是失败的测试,(我已经删除了对在两个平台上传递的其他属性的测试):

- (void)testThatSubnodesInheritsPropertiesFromParent{
    NORLabelNode *threeLineNode    = [self nodeWithThreeSubNodes];
    threeLineNode.fontColor    = [SKColor greenColor];

    for (SKLabelNode *subNode in threeLineNode.subNodes) {
        XCTAssertEqualObjects(threeLineNode.fontColor, subNode.fontColor, @"The subnodes should have the same fontColor as the parent.");
    }
}

测试失败的详细信息如下: ((threeLineNode.fontColor)等于(subNode.fontColor))失败:(“NSCalibratedRGBColorSpace 0 1 0 1”)不等于(“NSDeviceRGBColorSpace 0 0.976895 0 1”) ...

我根本不清楚节点如何用不同的色彩空间结束......

2 个答案:

答案 0 :(得分:1)

由于我们知道颜色空间不同,我会尝试将它们转换为相同的颜色空间,然后再使用-colorUsingColorSpace:(NSColorSpace *)进行比较。您可以将它们解析为一个已知的颜色空间或将它们转换为彼此的颜色空间。只有在Mac上才会发生这种情况并且NSColorSpace可用。

CocoaBuilder邮件列表上的post讨论了比较组件值,但这并不理想,因为组件不区分rgb与灰度。

答案 1 :(得分:0)

根据Sprite Kit Function Reference SKColor

  

扩展为特定于平台的颜色类的宏。

#if TARGET_OS_IPHONE
#define SKColor UIColor
#else
#define SKColor NSColor
#endif

正如我们在UIColorNSColor中看到的那样,有不同的色彩空间便利方法。

例如,如果您使用colorWithWhite:alpha:,您将在设备灰色空间中获得颜色“,如果您使用colorWithHue:saturation:brightness:alpha:,您将在设备RGB颜色空间中获得颜色”。