7
votes

Comparer les couleurs dans l'objectif-c

J'essaie de déterminer si deux couleurs sont équivalentes, en utilisant le code écrit dans l'objectif-c.

J'utilise cet extrait de code pour déterminer si les deux couleurs sont équivalentes (actuellement à des fins de débogage) xxx

ma console montre xxx

Je peux poster plus de code si demandé (je ne sais plus si tout est vraiment nécessaire). La couleur actuelle a été initialement définie comme xxx

si c'est une aide.

Je suis assez sûr que je fais tout simplement le problème, et ça Il y a probablement une méthode intégrée pouvant comparer les couleurs que je ne suis tout simplement pas au courant.


1 commentaires

La question devrait être reformulée à «comparer les objets dans l'objectif-c» car il s'avère que cela n'a rien à voir avec les couleurs.


3 Réponses :


11
votes

Les objets doivent être comparés à l'aide de la méthode iSequal: , pas == , qui compare simplement l'adresse du pointeur


1 commentaires

JE VOUS REMERCIE! Je viens de modifier mon code un peu pour comparer les sorties de chaîne par opposition aux couleurs elles-mêmes, en utilisant ISequal en cours de route. Fonctionne magnifiquement maintenant. Merci!



1
votes

Vous testez des pointeurs d'objet pour l'équivalence, ce qui ne reviendra probablement jamais de retourner vrai. Si vous souhaitez travailler avec les valeurs de couleur réelles, vous devez obtenir la référence CGColor sous-jacente.


0 commentaires

19
votes
@implementation UIColor (compare)

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

@end
Keep in mind that two colors that look the same may or may not return TRUE, since the components are kept as floats and they may differ by a value that's less than the display hardware can resolve.Also keep in mind that if they're defined in different color spaces, this method will never return TRUE.

1 commentaires

Je viens d'avoir une situation où deux Uicolors avaient les mêmes composantes de valeur et que cgcolorequaltocolor est retourné non égal pendant que [Uicolor Isequal:] travaille, y a-t-il quelque chose qui me manque?