2009-10-20 8 views
6

में रंगों की तुलना करना मैं उद्देश्य-सी में लिखे गए कोड का उपयोग करके यह निर्धारित करने की कोशिश कर रहा हूं कि दो रंग बराबर हैं या नहीं।उद्देश्य-सी

मैं कोड के इस स्निपेट का उपयोग कर रहा है, तो यह निर्धारित करने के दो रंग (डिबगिंग उद्देश्यों के लिए वर्तमान में) बराबर हैं

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

प्रश्न "उद्देश्य-सी में वस्तुओं की तुलना" करने के लिए फिर से लिखा जाना चाहिए क्योंकि यह पता चला है कि इसमें रंगों से कोई लेना देना नहीं है। – nschmidt

उत्तर

11

वस्तुओं isEqual: विधि, नहीं ==, जो केवल सूचक पता

+1

मुझे लगता है कि आपका मतलब है एक्वाल: – nall

+0

धन्यवाद! जिस तरह से IEqual का उपयोग कर, रंगों के विपरीत स्वयं स्ट्रिंग आउटपुट की तुलना करने के लिए मैंने अपने कोड को थोड़ा सा संशोधित किया है। अब खूबसूरती से काम करता है। धन्यवाद! – sshaukat

1

आप समानक के लिए वस्तु संकेत परीक्षण कर रहे हैं, जो शायद कभी नहीं सच वापस जाने के लिए जा रहा है तुलना का उपयोग कर की तुलना में किया जाना चाहिए। यदि आप वास्तविक रंग मानों के साथ काम करना चाहते हैं तो आपको अंतर्निहित CGColor संदर्भ प्राप्त करना होगा।

17
@implementation UIColor (compare) 

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

@end 

ध्यान रखें कि दो रंग है कि एक ही सकता है देख सकते हैं या सही वापस नहीं कर सकते, क्योंकि घटकों तैरता के रूप में रखा जाता है और वे कहते हैं कि कम प्रदर्शन हार्डवेयर हल कर सकते हैं की तुलना में है एक मूल्य के द्वारा भिन्न हो सकती है।

यह भी ध्यान रखें कि यदि उन्हें विभिन्न रंग रिक्त स्थानों में परिभाषित किया गया है, तो यह विधि कभी भी सत्य नहीं लौटेगी।

+0

मुझे बस एक ऐसी स्थिति थी जहां दो यूआईसीओलर्स के पास समान मूल्य घटक थे और उसी रंग की जगह में थे लेकिन CGColorEqualToColor बराबर नहीं लौटा, जबकि [UIColor isEqual:] काम किया, क्या मुझे कुछ याद आ रही है? –