iPhone 6比较两个UIColors

时间:2015-02-25 13:02:09

标签: ios 32bit-64bit uicolor iphone-6 iphone-64bit

我这里有两种颜色是实例的日志:

(lldb) po acolor
UIDeviceRGBColorSpace 0.929412 0.133333 0.141176 1

(lldb) po hexColor
UIDeviceRGBColorSpace 0.929412 0.133333 0.141176 1

我有这个代码适用于iPhone 4s 5但不适用于iPhone 6:

if ([acolor isEqual:hexColor])
{
    // other code here.
}

另外,我从图像像素中创建了这个颜色:

CGFloat red   = (rawData[byteIndex]     * 1.0) / 255.0;
CGFloat green = (rawData[byteIndex + 1] * 1.0) / 255.0;
CGFloat blue  = (rawData[byteIndex + 2] * 1.0) / 255.0;
CGFloat alpha = (rawData[byteIndex + 3] * 1.0) / 255.0;

但似乎iPhone 4和iPhone 6之间存在一些差异:

例如,如果我在iPhone 6上打印红色,它有:

(lldb) po red
0.92941176470588238

和iPhone 4:

(lldb) po red
0.929411768

由于我认为32位和64位架构,因此值不同。

但正如我们在颜色上所看到的那样,他们看起来似乎有正确的价但它永远不会与成功相提并论。所以acolor不等于hexColor。决不。仅适用于iPhone 4和5。

当然,我可以使用float类型而不是CGFloat。但只是注意到舍入似乎很有效,而UIColors对于不同的设备具有相同的值。但比较不起作用。

我使用这种方法获得了hexColor:

+ (UIColor *)colorWithHexString:(NSString *)hexString
{
    const char *cStr = [hexString cStringUsingEncoding:NSASCIIStringEncoding];
    long x = strtol(cStr, NULL, 16);
    return [UIColor colorWithHex:(UInt32)x];
}

+ (UIColor *)colorWithHex:(UInt32)col {

    unsigned char r, g, b;
    b = col & 0xFF;
    g = (col >> 8) & 0xFF;
    r = (col >> 16) & 0xFF;

    return [UIColor colorWithRed:(float)r/255.0f
                           green:(float)g/255.0f
                            blue:(float)b/255.0f
                           alpha:1];
}

1 个答案:

答案 0 :(得分:0)

您是否尝试将两者都舍入到相同的十进制数,然后进行比较? 例如,如果你将9位小数四舍五入会发生什么?

float rounded = roundf (original * 1000000000) / 1000000000.0;

这段代码改编自alastair的帖子:Round a float value to two post decimal positions