2009-10-20 11 views
6

Tôi đang cố gắng xác định xem hai màu có tương đương hay không, sử dụng mã được viết trong Objective-C.So sánh màu sắc trong Mục tiêu-C

Tôi đang sử dụng đoạn mã này để xác định xem hai màu là tương đương (hiện cho mục đích gỡ lỗi)

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

console của tôi là thể hiện

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 

tôi có thể gửi mã hơn nếu hỏi (Tôi không biết nếu có thêm thực sự là cần thiết). Màu hiện tại ban đầu được định nghĩa là

UIColor *currentColor; 

nếu đó là bất kỳ trợ giúp nào.

Tôi khá chắc chắn rằng tôi chỉ đang so sánh sai và có thể một số phương pháp tích hợp có thể so sánh màu sắc mà tôi không biết.

+0

Câu hỏi cần được lặp lại thành "So sánh đối tượng trong mục tiêu-C" vì nó chỉ ra nó không liên quan gì đến màu sắc. – nschmidt

Trả lời

11

đối tượng phải được so sánh bằng cách sử dụng phương pháp isEqual:, không ==, mà chỉ đơn giản so sánh địa chỉ con trỏ

+1

Tôi nghĩ rằng bạn có nghĩa là isEqual: – nall

+0

CẢM ƠN BẠN! Tôi chỉ cần sửa đổi mã của tôi một chút để so sánh các kết quả đầu ra chuỗi như trái ngược với màu sắc của mình, bằng cách sử dụng isEqual trên đường đi. Hoạt động tốt đẹp ngay bây giờ. Cảm ơn! – sshaukat

1

Bạn đang thử nghiệm con trỏ đối tượng cho tương đương, mà có lẽ không bao giờ trở thành sự thật. Nếu bạn muốn làm việc với các giá trị màu thực tế thì bạn sẽ cần phải có được tham chiếu CGColor cơ bản.

17
@implementation UIColor (compare) 

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

@end 

Hãy nhớ rằng hai màu trông giống nhau có thể hoặc không thể trả về TRUE, vì các thành phần được giữ dưới dạng phao và chúng có thể khác nhau bởi giá trị nhỏ hơn phần cứng hiển thị có thể giải quyết.

Cũng xin lưu ý rằng nếu chúng được xác định trong các không gian màu khác nhau, phương pháp này sẽ không bao giờ trả về TRUE.

+0

Tôi chỉ có một tình huống mà hai UIColors có cùng một thành phần giá trị và trong cùng một không gian màu nhưng CGColorEqualToColor trả về không bằng nhau khi [UIColor isEqual:] hoạt động, có cái gì tôi đang thiếu? –