如何比较UIColors?

我想检查UIImageView上背景的颜色设置。我试过了:


if(myimage.backgroundColor == [UIColor greenColor]){

...}

else{

...}

但这是行不通的,即使我知道颜色是绿色,它也总是落在其他部分。


另外,还有一种方法可以在调试控制台中输出当前颜色。


p [myimage backgroundColor]


po [myimage backgroundColor]

不工作


蝴蝶不菲
浏览 618回答 3
3回答

暮色呼如

samvermette的解决方案翻译为swift:extension UIColor {    func isEqualToColor(otherColor : UIColor) -> Bool {        if self == otherColor {            return true        }        let colorSpaceRGB = CGColorSpaceCreateDeviceRGB()        let convertColorToRGBSpace : ((color : UIColor) -> UIColor?) = { (color) -> UIColor? in            if CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) == CGColorSpaceModel.Monochrome {                let oldComponents = CGColorGetComponents(color.CGColor)                let components : [CGFloat] = [ oldComponents[0], oldComponents[0], oldComponents[0], oldComponents[1] ]                let colorRef = CGColorCreate(colorSpaceRGB, components)                let colorOut = UIColor(CGColor: colorRef!)                return colorOut            }            else {                return color;            }        }        let selfColor = convertColorToRGBSpace(color: self)        let otherColor = convertColorToRGBSpace(color: otherColor)        if let selfColor = selfColor, otherColor = otherColor {            return selfColor.isEqual(otherColor)        }        else {            return false        }    }}

人到中年有点甜

正如zoul在评论中指出的那样,当比较不同模型/空间中的颜色(例如与)时,isEqual:将返回。我编写了这个UIColor扩展,可以在比较它们之前将两种颜色转换为相同的颜色空间:NO#FFF[UIColor whiteColor]- (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];}

慕妹3146593

这可能为时已晚,但是CoreGraphics有一个更简单的API可以实现此目的:CGColorEqualToColor(myColor.CGColor, [UIColor clearColor].CGColor)就像文档中说的那样:指示两种颜色是否相等。如果两种颜色具有相等的色彩空间和数字上相等的颜色分量,则它们是相等的。这解决了很多麻烦和泄漏/自定义算法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS