首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何比较UIColors?

如何比较UIColors?
EN

Stack Overflow用户
提问于 2009-06-09 14:44:13
回答 16查看 53.7K关注 0票数 129

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

代码语言:javascript
复制
if(myimage.backgroundColor == [UIColor greenColor]){
...}
else{
...}

但这不起作用,即使我知道颜色是绿色的,它总是落在else部分。

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

代码语言:javascript
复制
p [myimage backgroundColor]

代码语言:javascript
复制
po [myimage backgroundColor]

不工作。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2009-06-09 14:46:43

你试过[myColor isEqual:someOtherColor]吗?

票数 176
EN

Stack Overflow用户

发布于 2012-01-18 01:59:16

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

代码语言:javascript
复制
- (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];
}
票数 77
EN

Stack Overflow用户

发布于 2015-06-04 22:28:58

samvermette的解决方案转化为swift:

代码语言:javascript
复制
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
        }
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/970475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档