如何将UIExtendedSRGBColorSpace与我的颜色值相匹配

时间:2017-11-22 20:47:58

标签: ios swift uicolor cgcolor cgcolorspace

我使用XCode可视化编辑器设置UIButton的颜色。我使用RGB滑块设置它。enter image description here

然后我设置变量green

let green = UIColor(red: 0, green: 210/255, blue: 0, alpha: 1)

当我打印出green值和UIButton.backgroundColor时,我会相应地得到下一个值:

UIExtendedSRGBColorSpace -0.146119 0.836984 -0.0130851 1
UIExtendedSRGBColorSpace 0 0.823529 0 1

所以,正如我猜的那样,颜色空间是相等的,但值不是。为什么会这样? Apple的UIButton()做了一些隐藏的转换?什么目的?是否可以为此按钮属性和green属性设置相同的值。

1 个答案:

答案 0 :(得分:5)

“RGB Sliders”弹出式菜单旁边有一个按钮 允许您选择颜色空间:

enter image description here

在你的情况下,它被设置为“显示P3”,一个颜色空间 比sRGB色彩空间“更大”并允许显示更多 具有P3显示的较新设备上的颜色。表示这种颜色 在“扩展的sRGB色彩空间”中,组件不是 限制在0.0到1.0的范围内(参见UIColor中的“颜色和颜色空间”) 欲获得更多信息)。在你的情况下

UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

具有负红色和蓝色分量,即色域外的颜色 sRGB。

如果将颜色选择器中的颜色空间设置为“sRGB”,则0/210/0的结果将为

UIExtendedSRGBColorSpace 0 0.823529 0 1

相同
let green = UIColor(red: 0, green: 210/255, blue: 0, alpha: 1)

或者,以编程方式使用“显示P3”颜色空间 创造了颜色:

print(label.backgroundColor!)
// UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

let green = UIColor(displayP3Red: 0, green: 210/255, blue: 0, alpha: 1)
print(green)
// UIDisplayP3ColorSpace 0 0.823529 0 1
print(UIColor(cgColor: green.cgColor))
// UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

print(label.backgroundColor! == green)
// true