繁体   English   中英

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

[英]Why is color defined in IB different than one defined in code?

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

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

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

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

但是,产生的颜色是不同的。 为什么? 感觉就像xcode中的错误。 调试结果颜色后:

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

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


更新:我知道这个问题的“重复”。 他们有一个共同点。 他们正确地发现了问题,但未能解决。 它测试了Panic和Skala的开发人员颜色选择器。 他们有同样的问题。 而且,由于受伤,他们提供了十六进制值作为副本颜色。 来宾什么,那里的数字根本不受颜色配置文件的影响。 因此,例如颜色#999它们为每种颜色分量提供正好0.6 不幸的是,如果直接使用颜色,则会附加颜色配置文件,从而导致颜色不同。 获得精确RBG颜色的唯一方法是使用“安全网页颜色”,其中所得颜色具有通用RGB颜色配置文件,换句话说,不受影响。 问题是安全的网页颜色并不包含我们的设计师使用的所有颜色。

IB中定义

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

+ (UIColor *)rz_colorFromHex:(uint32_t)hexLiteral
{
    uint8_t r = (uint8_t)(hexLiteral >> 16);
    uint8_t g = (uint8_t)(hexLiteral >> 8);
    uint8_t b = (uint8_t)hexLiteral;

    return [self rz_colorFrom8BitRed:r green:g blue:b];
}

+ (UIColor *)rz_colorFromHexString:(NSString *)string
{
    NSParameterAssert(string);
    if ( string == nil ) {
        return nil;
    }

    unsigned int hexInteger = 0;
    NSScanner *scanner = [NSScanner scannerWithString:string];

    [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"x#"]];
    [scanner scanHexInt:&hexInteger];

    return [self rz_colorFromHex:hexInteger];
}

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

如果它是Xcode错误,我会感到惊讶,但是让我知道当您从调试器检查颜色时会发生什么。

编辑:

因此,对此进行更多研究,可以将不同的色彩空间用于RGB。 默认情况下,界面构建器使用的是iOS使用的另一种。 要切换它们,请在使用颜色选择器时单击小齿轮,然后将其设置为“通用RGB”。 在此处输入图片说明

你可以这样做

例

并为另一个视图编写代码:

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

更新:

在Xcode中,单击颜色选择器中的颜色空间弹出窗口,然后选择“通用RGB”,然后输入Photoshop中的红色,绿色和蓝色值,而不是十六进制值

我们可以找到很多重复项:

Interface Builder的颜色选择器中的颜色错误

XCode Interface Builder中奇怪的颜色?

Interface Builder中的颜色错误

Xcode 6 Beta颜色选择器问题

...

整个问题已由Apple在El Capitan中解决。 因此,如果您在El Capitan上使用xcode 7,则不再是问题。 输入#hex颜色值不再更改颜色空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM