为什么IB中定义的颜色与代码中定义的颜色不同?

时间:2015-04-28 15:02:10

标签: ios objective-c xcode uicolor

我有一个单一的视图应用。我在单个视图中定义了两个UIView个实例。我希望两者都有相同的颜色。

对于第一个视图,我在Interface Builder中定义它并选择一种颜色。我想要#999999(灰色)。新的颜色选择器可以输入十六进制颜色值,因此很容易输入:999999

对于第二个视图,我通过设置第二个视图的背景颜色来定义它。我使用#999999设置了相同的[UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1]颜色。

简单计算:#99 -> 153 -> 153/255 == 0.6.目前为止很好。

然而产生的颜色是不同的。为什么?这感觉像是xcode中的一个bug。调试结果颜色后:

IB中定义的颜色:UIDeviceRGBColorSpace 0.529648 0.529632 0.529641 1

代码中定义的颜色:UIDeviceRGBColorSpace 0.6 0.6 0.6 1

更新: 我知道这个问题的“重复”。他们有一个共同点。他们正确地确定了问题,但却无法解决问题。它测试了Panic和Skala的开发商颜色选择器。他们有同样的问题。因为侮辱伤害,他们提供复制颜色作为十六进制值。客人什么,数字根本不受颜色配置文件的影响。因此,例如颜色#999,它们为每个颜色分量提供精确0.6。不幸的是,如果直接使用颜色,它会附加颜色配置文件,并且颜色会有所不同。获得精确RBG颜色的唯一方法是使用“安全网页颜色”,其中产生的颜色具有通用RGB颜色配置文件,换言之,不受影响。问题是安全的网页颜色不包含我们设计师使用的所有颜色。

defined in IB

3 个答案:

答案 0 :(得分:0)

这是UIColor上的一个类别,如果有帮助,可以从十六进制字符串创建joinphrase

UIColor

至于为什么你的颜色不同。我会设置一个断点,看看颜色在运行时实际上是相同的。您甚至可以打印出每种颜色的rgb通道,以确保它们没有区别。

如果是Xcode错误,我会感到惊讶,但请告诉我从调试器中检查颜色时会发生什么。

编辑:

因此,您可以使用不同的颜色空间进行RGB调查。默认情况下,界面构建器使用iOS使用的另一个。要切换它们,请在使用颜色选择器时单击小齿轮并将其设置为Generic RGB。 enter image description here

答案 1 :(得分:0)

你可以这样做

Example

另一个视图的代码:

self.testView.backgroundColor = [UIColor colorWithRed:153.0/255.0 green:153.0/255.0 blue:153.0/255.0 alpha:1.0];

更新:

在Xcode中,单击颜色选择器中的颜色空间弹出窗口并选择“Generic RGB”,然后从Photoshop输入红色,绿色和蓝色值,而不是HEX VALUE

我们可以找到这么多的副本:

Wrong color in Interface Builder's color picker

Weird colors in XCode Interface Builder?

Wrong color in Interface Builder

Xcode 6 beta color picker issue

...

答案 2 :(得分:0)

整个问题由Apple在El Capitan修复。因此,如果您在El Capitan上使用xcode 7,这不再是一个问题。输入#hex颜色值不再改变颜色空间。