작업을 하다보면 여러가지 객체에 대해 비교를 자주 하게 된다 문자가 같은지 숫자가 같은지 등등… 여기서 NSString나 NSNumber같은 객체는 단순히 == 연산자로 비교가 안되어 애플에서 관련 비교 메소드를 만들어줬다 하지만 UIColor같은경우 비교 메소드가 없어서 따로 만들어 사용해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
- (BOOL)isEqualToColor:(UIColor *)otherColor { CGColorSpaceRef colorSpaceRGB = CGColorSpaceCreateDeviceRGB(); UIColor *(^convertColorToRGBSpace)(UIColor*) = ^(UIColor *color) { if(CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) == kCGColorSpaceModelMonochrome) { const CGFloat *oldComponents = CGColorGetComponents(color.CGColor); CGFloat components[4] = {oldComponents[0], oldComponents[0], oldComponents[0], oldComponents[1]}; CGColorRef colorRef = CGColorCreate( colorSpaceRGB, components ); UIColor *color = [UIColor colorWithCGColor:colorRef]; CGColorRelease(colorRef); return color; } else return color; }; UIColor *selfColor = convertColorToRGBSpace(self); otherColor = convertColorToRGBSpace(otherColor); CGColorSpaceRelease(colorSpaceRGB); return [selfColor isEqual:otherColor]; } |
UIColor를 카테고리로 확장해서 만들면 좀더 편리해진다