我想比较两个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。有什么建议吗?
答案 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?)。希望这会让你对这个主题有更多的了解。