2009-10-20 7 views
6

Ich versuche, wenn zwei Farben gleichwertig sind, um zu bestimmen, Code in Objective-C geschrieben werden.Vergleicht man Farben in Objective-C

ich diesen Code-Snippet bin mit zu bestimmen, ob die beiden Farben gleichwertig sind (derzeit für Debug-Zwecke)

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

Meine Konsole

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 

zeigt kann ich mehr Code abgeben gefragt (ich weiß nicht, ob mehr wirklich nötig ist). Die aktuelle Farbe wurde ursprünglich als

UIColor *currentColor; 

definiert, wenn das irgendeine Hilfe ist.

Ich bin ziemlich sicher, dass ich nur die falsche vergleichen zu tun, und dass es wahrscheinlich einige integrierte Methode, die Farben vergleichen kann, dass ich einfach nicht bewusst bin.

+0

Die Frage sollte neu formuliert werden, um „Objective-C in Objekten Vergleich“, da es nichts mit Farben zu tun hat, stellt sich heraus. – nschmidt

Antwort

11

Objekte müssen mit dem isEqual: Verfahren verglichen werden, nicht ==, die einfach den Adresszeiger vergleicht, die wahrscheinlich gehen wird nie wahr zurück. Wenn Sie mit den tatsächlichen Farbwerten arbeiten möchten, müssen Sie die zugrunde liegende CGColor-Referenz abrufen.

+1

Ich denke du meinst isEqual: – nall

+0

DANKE! Ich habe meinen Code ein wenig modifiziert, um die String-Ausgaben im Gegensatz zu den Farben selbst zu vergleichen, wobei isEqual auf dem Weg verwendet wurde. Funktioniert jetzt wunderbar. Vielen Dank! – sshaukat

1

Sie testen Objektzeiger für equivalency

17
@implementation UIColor (compare) 

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

@end 

Beachten Sie, dass zwei Farben, die das gleiche aussehen können oder nicht TRUE zurückgeben können, da die Komponenten als Schwimmer gehalten werden, und sie können durch einen Wert unterscheiden, der weniger ist als die Display-Hardware auflösen kann.

Denken Sie auch daran, dass, wenn sie in verschiedenen Farbräumen definiert sind, wird diese Methode nie TRUE zurück.

+0

Ich hatte gerade eine Situation, in der zwei UIColors die gleichen Wertkomponenten und waren in der gleichen Farbraum aber CGColorEqualToColor zurück nicht gleich, während [UIColor isEqual:] gearbeitet, gibt es etwas, was ich vermisst habe? –