4

我曾经认为 [UIColor whiteColor] 与 [UIColor colorWithRed:1 green:1 blue:1 alpha:1] 完全相同,但事实证明并非如此!谁能解释一下?

CGFloat red1, green1, blue1, alpha1;
UIColor * color1 = [UIColor whiteColor];
[color1 getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1];
NSLog(@"%f, %f, %f, %f", red1, green1, blue1, alpha1);

UIColor * color2 = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
[color2 getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1];
NSLog(@"%f, %f, %f, %f", red1, green1, blue1, alpha1);

输出:

0.000000, 0.000000, 0.000000, -1.998628
1.000000, 1.000000, 1.000000, 1.000000

这很不酷..非常不愉快

4

1 回答 1

6

从文档中UIColor getRed:green:blue:alpha:

如果颜色在兼容的颜色空间中,则颜色将转换为 RGB 格式,并将其组件返回给您的应用程序。如果颜色不在兼容的颜色空间中,则参数不变。

[UIColor whiteColor]和创建的灰色阴影UIColor colorWithWhite:alpha:来自与 RGB 颜色空间不同的颜色空间。因此它们不在兼容的色彩空间中。因此,不宜UIColor getRed:green:blue:alpha:与此类颜色一起使用。

尝试初始化 4 个 CGFloat 值,看看你得到了什么。如果将它们全部设置为零,它们应该保持为零。

于 2012-10-25T05:59:38.840 回答