iPhone 6 比较两种 UIColors
Posted
技术标签:
【中文标题】iPhone 6 比较两种 UIColors【英文标题】:iPhone 6 compare two UIColors 【发布时间】:2015-04-27 11:43:36 【问题描述】:我有两种颜色,这里是实例的日志:
(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];
【问题讨论】:
rawData
是如何定义的?
您尝试使用- (BOOL)getRed:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha
吗?
是的,问题出在原始数据上,如果我们使用 cgfloat,我们有最大的值然后浮动。但我没有比较红色或绿色或蓝色值,因为您可以看到颜色日志与 acolor 和 hexColor 相同,但它不会比较它们。也许也记录四舍五入的值。当然问题出在类型上,所以我只需要一个,例如 float 或 cgfloat,因为我们永远不会成功,例如使用 0.92941176470588238 并且它不能 = 0.929411768。但是我正在比较 UIColors 并且日志告诉我它们对于 RGBA 具有相同的值。
【参考方案1】:
您是否尝试将两者四舍五入到相同的小数位数,然后进行比较? 例如,如果您同时四舍五入 9 位小数会发生什么?
float rounded = roundf (original * 1000000000) / 1000000000.0;
这段代码改编自 alastair 在这个问题中的帖子:Round a float value to two post decimal positions
【讨论】:
问题是我使用 float 和 cgfloat 并且它适用于不同的架构。但是颜色向我显示了数字信息,一切似乎都是平等的。所以我在比较 UIColors 而不仅仅是原始数据浮点值。以上是关于iPhone 6 比较两种 UIColors的主要内容,如果未能解决你的问题,请参考以下文章
已经为 iPhone 4 和 5 构建的应用程序将如何在 iPhone 6 和 6 plus 中展示
iPhone 6 摄像头的新技术 Focus Pixels 是啥意思?