比较UIColors

时间:2014-03-21 21:02:04

标签: cocoa-touch uicolor

我想比较两个UIColors,但没有任何效果。我甚至写了这个函数来比较这些颜色的RGB值:

-(BOOL)compare:(UIColor*)colorA withColor:(UIColor*)colorB{
    CGFloat redA = 0.0, greenA = 0.0, blueA = 0.0, alphaA =0.0;
    [colorA getRed:&redA green:&greenA blue:&blueA alpha:&alphaA];

    CGFloat redB = 0.0, greenB = 0.0, blueB = 0.0, alphaB =0.0;
    [colorB getRed:&redB green:&greenB blue:&blueB alpha:&alphaB];

    NSLog(@"A - %f, %f, %f", redA, greenA, blueA);
    NSLog(@"B - %f, %f, %f", redB, greenB, blueB);

    if (redA == redB && greenA == greenB && blueA == blueB) {
        return  true;
    }else{
        NSLog("false");
        return false;
    }
}

它返回了这个,我真的没有:

2014-03-21 21:57:09.481 TextEdit[6863:70b] A - 0.411765, 0.803922, 0.117647
2014-03-21 21:57:09.481 TextEdit[6863:70b] B - 0.411765, 0.803922, 0.117647
2014-03-21 21:57:09.482 TextEdit[6863:70b] false

所以它是平等的,但它返回false。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

由于数字的存储方式(舍入等),你不应该使用operator ==来比较浮点数(float,double,CGFloat等)。相反,你应该做的是比较颜色成分是否在彼此的特定范围内。我认为1.0 / 255.0应该没问题。

所以你应该做的是

const CGFloat kRange = 1.0/255.0;
if (fabs(redA - redB) < kRange &&
    fabs(greenA - greenB) < kRange &&
    fabs(blueA - blueB) < kRange &&
    fabs(alphaA - alphaB) < kRange)
{
    return true;
}
else
{
    return false;
}

答案 1 :(得分:-2)

我的Mac没有,但你试过了吗?

if([colorA isEqual:colorB]) {
  // true
} else {
  // false
}

如果有的话,请查看此帖子(How to compare UIColors?)。希望这会让你对这个主题有更多的了解。