这真的很奇怪。将+[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
,但这个事实真的很烦人。
有人可以为我阐明这个吗?
答案 0 :(得分:5)
“UIColor
”并非始终基于RGBA值。
UIColor可以使用不同的颜色空间,例如CMYK颜色,如果是白色,则可以通过[UIColor colorWithWhite:alpha:]
获得白色。
我怀疑你的案件[UIColor whiteColor]
将等于[UIColor colorWithWhite:1.0 alpha:1.0]
。
答案 1 :(得分:2)
一个可能的解释是不同颜色实例使用的颜色空间。白色可以在许多不同的域或空间中表示。如果颜色空间不相等,或者如果空间不容易变换到另一个空间(例如,将绝对表示转换为设备表示可能导致信息丢失),则相等性比较可能为负。
颜色表示很复杂;准确的“比较”需要多种方法来比较颜色,许多方法应该包括渲染目的地。
答案 2 :(得分:2)
[UIColor whiteColor]不会产生RGB色彩空间对象 - 它位于灰度色彩空间中。试试
NSLog(@"color is %@", [UIColor whiteColor]);
非常讨厌。
当然,您可以使RGB等于1.0的白色,但它与[UIColor whiteColor]颜色对象不同。
答案 3 :(得分:0)
[UIColor whiteColor]
的类型为UICachedDeviceWhiteColor
,而[UIColor colorWithRed:green:blue:alpha:]
在运行时返回UIDeviceRGBColor
,因此它们不相等。