首页 文章

关于UIColor,这是一个bug还是什么?

提问于
浏览
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

这是不酷的..非常不愉快

1 回答

  • 6

    来自 UIColor getRed:green:blue:alpha: 的文档:

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

    [UIColor whiteColor] 和使用 UIColor colorWithWhite:alpha: 创建的灰色阴影来自与RGB颜色空间不同的颜色空间 . 因此它们不在兼容的色彩空间中 . 所以使用 UIColor getRed:green:blue:alpha: 这样的颜色是不合适的 .

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

相关问题