IOS7.0系统上,特定颜色调用`- getRed:green:blue:alpha:`方法返回结果有误的问题

1. 问题描述:

项目中,一个页面的NavigationBar是有动画效果的,Title的颜色会不断变化。测试的时候发现,在IOS7.0系统上本来应该是白色的Title变成了黑色。调试发现问题出在一个系统API上- getRed:green:blue:alpha:。在7.0系统上对[UIColor whiteColor]调用这个API,获取R、G、B值是错误的,均为接近0的小数,正确的结果是1。

2. 原因:

+ (UIColor *)blackColor;      // 0.0 white 
+ (UIColor *)darkGrayColor;   // 0.333 white 
+ (UIColor *)lightGrayColor;  // 0.667 white 
+ (UIColor *)whiteColor;      // 1.0 white 
+ (UIColor *)grayColor;       // 0.5 white 

原因是系统对部分颜色的存储进行了优化,用两个字节存储这些颜色,按RGB的存储方式去取值就会得到错误的值。7.0以上的系统,这个API对这些特殊存储的颜色进行了兼容处理,返回值是正确的。

3. 简单解决方法:

如果要用这个API- getRed:green:blue:alpha:,用[UIColor colorWithRGB:0xffffff]代替[UIColor whiteColor]

猜你喜欢

转载自blog.csdn.net/fly1183989782/article/details/52303221