浅谈iOS颜色
来源:互联网 发布:java 方法重写有什么用 编辑:程序博客网 时间:2024/06/04 21:03
浅谈iOS颜色
1.简介
到深圳一个月了,虽说找工作不容易,但是终于找到了一份工作了,话不多说,好久没写博客了,今天我们来谈一谈颜色:
在iOS开发中,我们一般用两种方式来表示颜色:
第一种就是RGB了,举个例子,我们要设置颜色为红色:
Objective-C:UIColor *redColor1 = [UIColor redColor];UIColor *redColor2 = [UIColor colorWithRed:255/256.0 green:0.0 blue:0.0 alpha:1.0];
Swift:let redColor1 = UIColor.redlet redColor2 = UIColor(red: 255/256.0, green: 255/256.0, blue: 255/256.0, alpha: 1.0)
我们知道,RGB分别表示三种颜色通道,分别是Red、Green、Blue,什么是RGB,而目前颜色表达方式有两种:32位和24位。用3种颜色通道表达24位表达方式(32位的添加了透明度支持),那么每位颜色通道表示范围就是:0~256。但是因为UIColor传入的参数为0~1之间,所以我们需要将数值除以256。
上面便是我个人对RGB的理解,下面贴出RGB常用颜色表链接:
RGB颜色通道
2.使用
一般我们使用RGB时可以将代码以宏的方式表现出来:
Objective-C:#define RGBCOLOR(r, g, b, a) [UIColor colorWithRed:(r)/256.0 green:(g)/256.0 blue:(b)/256.0 alpha:(a)]Swift:func RGBColor(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) -> UIColor { return UIColor(red: r/256.0, green: g/256.0, blue: b/256.0, alpha: a)}
所以上面就可以写成:
UIColor *redColor3 = RGBCOLOR(255, 0, 0, 1);
下面介绍另一种,就是用#开头后面加上6位数字字母表示的,比如:白色是#FFFFFF
,那么这又是什么意思了?
接下来让我小小的揣测一下,我们知道白色用RGB都是255,那么是不是就意味着FF=255, FF=255, FF=255
了。
其实这种#字表示颜色法,用的是16进制表示的,本质上还是用的RGB
,所以如果我们遇到美工切图用的这种表示方法,我们可以将其转换为RGB
方法,转换规则为: R=第一位*16+第二位,G=第三位*16+第四位,B=第五位*16+第六位
举个例子:我们在RGB颜色通道中看到印度红色是:#B0171F
,运用转换公式就是:
R = B * 16 + 0 = 11 * 16 = 176G = 1 * 16 + 7 = 23B = 1 * 16 + F = 16 + 15 = 31
这与我们在网站中看到的是一致的。
3.扩展
不过感觉这还是不方便啊,所以接下来提供一个更加完美的方法,那就是给颜色添加分类,话不多说,添上代码:
Objective-C:#import <UIKit/UIKit.h>@interface UIColor (Hex)// 默认alpha位1+ (UIColor *)colorWithHexString:(NSString *)color;//从十六进制字符串获取颜色,//color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;@end#import "UIColor+Hex.h"@implementation UIColor (Hex)+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha{ //删除字符串中的空格 NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; // String should be 6 or 8 characters if ([cString length] < 6) { return [UIColor clearColor]; } // strip 0X if it appears //如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾 if ([cString hasPrefix:@"0X"]) { cString = [cString substringFromIndex:2]; } //如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾 if ([cString hasPrefix:@"#"]) { cString = [cString substringFromIndex:1]; } if ([cString length] != 6) { return [UIColor clearColor]; } // Separate into r, g, b substrings NSRange range; range.location = 0; range.length = 2; //r NSString *rString = [cString substringWithRange:range]; //g range.location = 2; NSString *gString = [cString substringWithRange:range]; //b range.location = 4; NSString *bString = [cString substringWithRange:range]; // Scan values unsigned int r, g, b; [[NSScanner scannerWithString:rString] scanHexInt:&r]; [[NSScanner scannerWithString:gString] scanHexInt:&g]; [[NSScanner scannerWithString:bString] scanHexInt:&b]; return [UIColor colorWithRed:((float)r / 255.0f) green:((float)g / 255.0f) blue:((float)b / 255.0f) alpha:alpha];}//默认alpha值为1+ (UIColor *)colorWithHexString:(NSString *)color{ return [self colorWithHexString:color alpha:1.0f];}@end
Swift:extension UIColor { func colorWithHex(color: NSString, alpha: CGFloat) -> UIColor { // 去除特殊符号 var cString = color.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased() as NSString if cString.length < 6 { return UIColor.clear } if cString.hasPrefix("0X") { cString = cString.substring(from: 2) as NSString } if cString.hasPrefix("#") { cString = cString.substring(from: 1) as NSString } if cString.length != 6 { return UIColor.clear } var range = NSRange() range.length = 2 range.location = 0 let rStr = cString.substring(with: range) as NSString range .location = 2 let gStr = cString.substring(with: range) as NSString range.location = 4 let bStr = cString.substring(with: range) as NSString var r: uint = 0, g: uint = 0, b: uint = 0 Scanner.init(string: rStr as String).scanHexInt32(&r) Scanner.init(string: gStr as String).scanHexInt32(&g) Scanner.init(string: bStr as String).scanHexInt32(&b) return UIColor(red: CGFloat(r)/256.0, green: CGFloat(g)/256.0, blue: CGFloat(b)/256.0, alpha: alpha) }}
以上纯属个人看法,如有漏洞希望大家指出来,感谢!
- 浅谈iOS颜色
- 浅谈颜色空间
- ios 颜色
- IOS 颜色
- 浅谈色彩心理 颜色表情
- ios颜色渐变
- IOS修改键盘颜色
- ios 颜色渐变效果
- ios中颜色设置
- ios 红绿蓝颜色255
- IOS 颜色渐变
- ios 配置颜色
- 颜色渐变 ios
- iOS绘制颜色渐变
- ios颜色渐变
- ios设置状态栏颜色
- IOS UIColor 自定义颜色
- IOS UIColor 自定义颜色
- 剑指offer--平衡二叉树
- 矢量图标文件格式设计
- unity 图片转byte数组
- gethup.sh
- ImageView上的Button无法响应
- 浅谈iOS颜色
- Codeforces Round #411 (Div. 2)(A-D 未完)
- java键盘录入练习题
- 数据结构实验之二叉树五:层序遍历
- 网络七层协议简介
- 下拉显示更多(XXX)的文字内容获取
- java基本类型间转化辅助类
- 汉诺塔问题
- hdu 1257最少拦截系统