2009-10-20 18 views
6

Próbuję określić, czy dwa kolory są równoważne, używając kodu napisanego w Objective-C.Porównanie kolorów w Objective-C

Używam tego fragmentu kodu w celu określenia, czy dwa kolory są równoważne (obecnie do celów debugowania)

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

Moja konsola pokazuje

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 

mogę pisać więcej kodu, jeśli (nie wiem, czy jest to naprawdę konieczne). Obecny kolor początkowo zdefiniowano jako

UIColor *currentColor; 

jeśli to jest jakaś pomoc.

Jestem dość pewny, że właśnie robię porównanie źle, i że jest prawdopodobnie pewna wbudowana metoda, która może porównać kolory, których po prostu nie jestem świadomy.

+0

Pytanie należy przeformułować na "Porównywanie obiektów w Objective-C", ponieważ okazuje się, że nie ma to nic wspólnego z kolorami. – nschmidt

Odpowiedz

11

obiekty muszą być porównywane przy użyciu metody isEqual:, nie ==, który po prostu porównuje wskaźnik adresu

+1

Myślę, że masz na myśli toEqual: – nall

+0

DZIĘKUJEMY! Po prostu zmodyfikowałem nieco swój kod, aby porównać wyjścia łańcuchowe w przeciwieństwie do samych kolorów, używając po drodze programu isEqual. Działa teraz pięknie. Dzięki! – sshaukat

1

testujesz wskaźniki obiektu dla równoważności, który prawdopodobnie nigdy nie wróci prawda. Jeśli chcesz pracować z rzeczywistymi wartościami kolorów, musisz uzyskać podstawowe odniesienie do CGColor.

17
@implementation UIColor (compare) 

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

@end 

Należy pamiętać, że dwa kolory, które wyglądają tak samo może być lub nie zwróci TRUE, ponieważ składniki są przechowywane jako pływaków i mogą się różnić od wartości, która jest mniejsza niż sprzęt wyświetlacz może rozwiązać.

Należy również pamiętać, że jeśli są zdefiniowane w różnych przestrzeniach kolorów, ta metoda nigdy nie zwróci wartości PRAWDA.

+0

Po prostu miałem sytuację, w której dwa UIColors miały te same komponenty wartości i znajdowały się w tej samej przestrzeni kolorów, ale CGColorEqualToColor powrócił nierównomiernie, gdy działało [UIColor isEqual:], czy jest coś, czego mi brakuje? –