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

我使用XCode可视化编辑器为UIButton设置颜色。 我使用RGB滑块设置它。 在此处输入图像描述

然后我设置变量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属性使用相同的值。

“RGB Sliders”弹出菜单旁边有一个按钮,可以选择颜色空间:

在此处输入图像描述

在您的情况下,它被设置为“显示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) 

或者,也可以使用Display 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