2013-10-02 62 views
0

我想獲得UITextView使用的顏色。UIColor比較沒有給出想要的結果

對於我寫的,

myTextView.textColor 

,但是這給了我作爲

UIDeviceRGBColorSpace 0.439216 0.439216 0.439216 1 

任何想法如何得到實際的RGB組合輸出?


我看到...

我需要用255乘以這樣的:d:P

當0.439216 * 255是112,爲什麼我的顏色進行比較,是不是給期望的結果?

我應用於UITextView的顏色如下使用常量。

#define placeColor [UIColor colorWithRed:112/255.0 green:112/255.0 blue:112/255.0 alpha:1.0] 

當我比較爲

if (aboutCompany.textColor == placeColor) { 
    NSLog(@"place color.."); 
    aboutCompany.text = @""; 
    aboutCompany.textColor = fottColor; 
} else { 
    NSLog(@"not place color.."); 
} 

我得到,不要將顏色...

任何理由?

回答

0

當您比較兩個NSObject的(或NSObject子類,在這種情況下),您不想使用==運算符。 ==運算符不會告訴您兩個對象是否具有相同的值,它只會告訴您是否在比較相同的對象。您需要使用'比較'或'isEqual'方法。 (比較有一些額外的開銷,因爲它實際上返回一個枚舉,指示三種狀態之一,分別對應於<,=和>)。

'在引擎蓋下',發生了什麼事情,在objective-C中,直接聲明一個NSObject,你只會聲明一個指針,然後用對象填充的地址空間填充指針。

{ 
    NSObject *foo=[[Foo alloc] init]; 
    NSObject *bar=foo; 

    foo==bar;//true 
    //If you inspect foo and bar really closely in the debugger, you'll discover they're both just integers pointing to a 'random' memory space. 
} 

{ 
    NSNumber *[email protected](1); 
    NSNumber *[email protected](1); 
    //Again, if you inspect these very closely, you'll discover they're pointers to memory space, but this time you're pointing to two different spaces in memory, even though you're storing the same data in them. 
    alpha==beta;//False, they're two separate objects 
    [alpha isEqualTo:beta];//true; their value is identical 
    [alpha intValue]==[beta intValue;//Again, true because their value is identical 
} 

而且,與浮點值的工作時,我會很小心平等信任運營商的結果 - 和的UIColor的是建立在浮動。即使他們'應該',浮游物也有不平等的惡習。它與數字的底層機器表示有關,數字中可能存在一定程度的「噪音」。這種噪音在大多數情況下相對微不足道(例如+/- 1 * 10^-10),但當您想要進行平等操作時,它會變成真正的痛苦。網上有很多關於這方面的文章,可以隨時查閱,但不要做平等,你需要檢查兩個數字之間的差異是否小於給定的epsilon - 差異小於10例如,^ -5。確切地說,如何得到一個合適的epsilon是我無法幫助你的,你需要做你自己的研究。如果我可以幫助的話,我從不使用花車來避免頭痛,並且絕對不會做任何需要平等運營者的事情。