簡體   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