为什么+[UIColor whiteColor]不等于另一个白色



这真的很奇怪。将+[UIColor redColor]与我自己创建的红色进行比较会得到相同的结果,但+[UIColor whiteColor]与另一种白色进行比较则不会。

// This test passes.
XCTAssertEqualObjects([UIColor redColor],
                      [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0],
                      @"Red should equal red.");
// While this test fails!
XCTAssertEqualObjects([UIColor whiteColor],
                      [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0],
                      @"White should equal white.");

虽然我通过一些有用的补充来扩展UIColor,但这一事实可能真的很烦人。

有人能为我阐明这一点吗?

"UIColor " 并不总是基于 RGBA 值。

UIColor 可以使用不同的颜色空间,例如 CMYK 颜色,如果是白色,您可以通过 [UIColor colorWithWhite:alpha:] 获得白色。

我怀疑在你的情况下[UIColor whiteColor]会等于[UIColor colorWithWhite:1.0 alpha:1.0].

一种可能的解释是不同颜色实例使用的颜色空间。白色可以在许多不同的域或空间中表示。如果颜色空间不相等,或者如果空间不容易转换为另一个空间(例如,将绝对表示转换为设备表示可能会导致信息丢失),则相等比较可能是负的。

颜色

表示很复杂;准确的"比较"需要多种方法来比较颜色,许多方法应该包括渲染目标。

[UIColor whiteColor] 不生成 RGB 颜色空间对象 - 它位于灰度颜色空间中。 尝试

NSLog(@"color is %@", [UIColor whiteColor]);

很烦人。

当然,您可以使 RGB 都等于 1.0 的白色,但它与 [UIColor whiteColor] 不是同一个颜色对象。

[UIColor whiteColor]的类型

UICachedDeviceWhiteColor,而[UIColor colorWithRed:green:blue:alpha:]在运行时返回UIDeviceRGBColor,因此它们不相等。

最新更新