我有两种颜色,这里是实例的日志:
(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
type 而不是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];
}