2009-10-20 24 views
6

Estoy tratando de determinar si dos colores son equivalentes, utilizando el código escrito en Objective-C.Comparación de colores en Objective-C

estoy usando este fragmento de código para determinar si los dos colores son equivalentes (actualmente para propósitos de depuración)

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

Mi consola está mostrando

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 

puedo publicar más de código si preguntó (no sé si alguna más es realmente necesaria). El color actual se definió inicialmente como

UIColor *currentColor; 

si es de alguna ayuda.

Estoy bastante seguro de que estoy haciendo la comparación incorrecta, y de que probablemente haya algún método incorporado que pueda comparar colores, del que no estoy al tanto.

+0

La pregunta debe volver a formularse como "Comparación de objetos en Objective-C", ya que resulta que no tiene nada que ver con los colores. – nschmidt

Respuesta

11

objetos deben ser comparados con el método isEqual:, no ==, que simplemente compara la dirección del puntero

+1

Creo que quieres decir isEqual: – nall

+0

¡GRACIAS! Acabo de modificar mi código un poco para comparar los resultados de la cadena en lugar de los colores en sí, utilizando isEqual en el camino. Funciona hermosamente ahora. ¡Gracias! – sshaukat

1

que está probando punteros a objetos de equivalencia, que es probable que nunca va a volver realidad. Si desea trabajar con los valores de color reales, deberá obtener la referencia CGColor subyacente.

17
@implementation UIColor (compare) 

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

@end 

Tenga en cuenta que dos colores que se ven el mismo puede o no puede devolver TRUE, ya que los componentes se mantienen como flotadores y pueden diferir en un valor que es menor que el hardware de visualización puede resolver.

También tenga en cuenta que si se definen en espacios de color diferentes, este método nunca volverá a ser VERDADERO.

+0

Acabo de tener una situación en la que dos UIColors tenían los mismos componentes de valor y estaban en el mismo espacio de color, pero CGColorEqualToColor no devolvió igual mientras [UIColor isEqual:] funcionó, ¿hay algo que me falta? –

Cuestiones relacionadas