我们在开发 ios 与 android的时候,关于颜色这个小问题影响还是很大的,这里面涉及到多个人ios开发者、android开发者、美工mm、web app 开发者的工作。
Ios 的 ARGB模式,android 的 hex(16进制,通常我叫他html颜色模式。html里面也有ARGB,但hex用的多些l)
哪有没有一种很好的方式统一ios 与 android的颜色方案呢。减少ARGB 与 hex之间的转化呢。至少从代码上看起来一样。
我个人喜欢hex(16进制的颜色),加之android很多地方都是hex的颜色体系。那就上ios拥有hex便利吧
- (UIColor *) h2c:(NSUInteger)hex{
NSUInteger red = (hex & 0x00ff0000) >> 16;
NSUInteger green = (hex & 0x0000ff00) >> 8;
NSUInteger blue = (hex & 0x000000ff);
NSUInteger alpha = (hex >> 24);
UIColor *c = [UIColorcolorWithRed:red/255.0fgreen:green/255.0fblue:blue/255.0falpha:alpha/255.0f];
return c;
}
代码很少吧,但很方便。这段代码可以为 UIColor 写一个类目,也可以写到自己的公共工具类里面。以下为使用方式。
调用方式:
UIView * v = [[UIViewalloc] init];
v.backgroundColor = [self h2c:0xffff0000];
是不是很方便,从此妈妈不用担心我 ios 与 android 关于颜色这个问题了。 美工mm也很赞同,网页开发者也很满意。
最后说明一下,16进制颜色的存储原理,这很重要哦。
16进制颜色刚好是4字节,一个无符号的整型大小。哪怎么映射成ARGB的呢,
就拿上面列子用到的 0xffff0000,为红色
这个颜色存储结构:
第1-2位(从左到右)ff为透明度,对应与10进制的(0-255)也对应与ARGB中的A;
第3-4位(从左到右)ff对应与ARGB中的R(红),对应与10进制的(0-255);
第5-6位(从左到右)ff对应与ARGB中的G(绿),对应与10进制的(0-255);
第7-8位(从左到右)ff对应与ARGB中的B(蓝),对应与10进制的(0-255)
这下明白了吧,快快这样使用吧。ios,android,美工,网页等都在一个统一的模式里面。
以上是本人的抛砖引玉。欢迎拍砖。