2009-10-20 115 views
6

我試圖用Objective-C編寫的代碼來確定兩種顏色是否相同。比較Objective-C中的顏色

我使用這個代碼片段,以確定是否這兩種顏色是等價的(目前用於調試)

NSLog(@"currentColor is %@", currentColor); 
NSLog(@"Adjacent Color is %@",[[buttonArray objectAtIndex:1] backgroundColor]); 
NSLog(@"%i",[[buttonArray objectAtIndex:1] backgroundColor]==currentColor); 

我的控制檯顯示

2009-10-20 00:27:10.814 colorGame[13588:207] currentColor is kCGColorSpaceModelRGB 0 0 1 1 
2009-10-20 00:27:10.815 colorGame[13588:207] Adjacent Color is kCGColorSpaceModelRGB 0 0 1 1 
2009-10-20 00:27:10.815 colorGame[13588:207] 0 

,如果我可以發佈更多的代碼問(我不知道是否還有其他需要)。當前顏色最初定義爲

UIColor *currentColor; 

如果這是任何幫助。

我很確定我只是在做比較錯誤,並且可能有一些內置方法可以比較顏色,我只是不知道。

+0

這個問題應該改寫爲「比較Objective-C中的對象」,因爲事實證明它與顏色無關。 – nschmidt 2009-10-20 07:44:55

回答

11

對象必須使用isEqual:方法,不==,它只是比較指針地址

+1

我想你的意思是isEqual: – nall 2009-10-20 07:39:44

+0

謝謝!我只是修改我的代碼來比較字符串輸出,而不是顏色本身,一路上使用isEqual。現在精美的作品。謝謝! – sshaukat 2009-10-20 07:46:20

1

您正在測試的對象指針的等價性,這可能是永遠不會返回true進行比較。如果你想使用實際的顏色值,那麼你需要得到底層的CGColor參考。

17
@implementation UIColor (compare) 

- (BOOL) isEqualToColor:(UIColor *) otherColor 
{ 
return CGColorEqualToColor(self.CGColor, otherColor.CGColor); 
} 

@end 

請記住,這看起來是一樣的五月或兩種顏色可能不會返回TRUE,因爲部件保持爲浮動,他們可以通過使用小於顯示硬件可以解決值不同。

另請注意,如果它們在不同的色彩空間中定義,則此方法永遠不會返回TRUE。

+0

我剛剛遇到了兩個UIColors具有相同值組件並且處於相同顏色空間但在[UIColor isEqual:]工作時CGColorEqualToColor返回值不相等的情況,是否有某些我丟失? – 2014-04-27 18:16:24