在开发中,UI给出的颜色值有时候是十六进制的,有时候给出的是RGB(255,255,255)这样的形式的,而iOS系统提供的方法中并没有直接传递这两种值返回UIColor对象的,这里自己封装了一个以便使用。

UIColor+LMColor.h

#import <UIKit/UIKit.h>

@interface UIColor(LMColor)

/**
* 获取透明度为1的随机颜色
*
* @return 随机获得的UIColor对象
*/
+ (UIColor *)randColor; /**
* 将16进制的颜色值转换成UIColor对象
*
* @param colorStr 16进制表示的颜色(0xc36000,0Xc36000,#c36000或者c36000格式都支持)
* @param alpha 透明度
*
* @return 转换过后的UIColor对象
*/
+ (UIColor *)colorWithHexString:(NSString *)colorStr alpha:(CGFloat)alpha; /**
* 返回(168,57,23)表示形式的UIColor
*
* @param r 红,0~255
* @param g 绿,0~255
* @param b 蓝,0~255
* @param a 透明度,0~100
*
* @return 转换过后UIColor对象
*/
+(UIColor *)colorWithR:(CGFloat)r g:(CGFloat)g b:(CGFloat)b a:(CGFloat)a;
@end

UIColor+LMColor.m

#import "UIColor+LMColor.h"

@implementation UIColor(LMColor)

+ (UIColor *)randColor {
CGFloat r = arc4random_uniform(256);
CGFloat g = arc4random_uniform(256);
CGFloat b = arc4random_uniform(256);
return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:1];
} +(UIColor *)colorWithR:(CGFloat)r g:(CGFloat)g b:(CGFloat)b a:(CGFloat)a{
return [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a/100.0f];
} + (UIColor *)colorWithHexString:(NSString *)colorStr alpha:(CGFloat)alpha { //移除前缀
if ([colorStr hasPrefix:@"0X"] || [colorStr hasPrefix:@"0x"]) {
colorStr = [colorStr substringFromIndex:2];
} if ([colorStr hasPrefix:@"#"]) {
colorStr = [colorStr substringFromIndex:1];
} //判断长度
if (colorStr.length != 6) {
return [UIColor clearColor];
} //提取值
NSRange range;
range.length = 2;
//r
range.location = 0;
NSString *rStr = [colorStr substringWithRange:range];
//g
range.location = 2;
NSString *gStr = [colorStr substringWithRange:range];
//b
range.location = 4;
NSString *bStr = [colorStr substringWithRange:range]; //转换值
unsigned int r, g, b;
[[NSScanner scannerWithString:rStr] scanHexInt:&r];
[[NSScanner scannerWithString:gStr] scanHexInt:&g];
[[NSScanner scannerWithString:bStr] scanHexInt:&b]; return [UIColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:alpha];
}
@end

扩展UIColor类的更多相关文章

  1. Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  2. codeigniter框架扩展核心类---实现前台后台视图的分离

    1. 扩展核心类,主要作用就是扩展系统现在的功能. 为前台增加独立的视图文件夹: a. 自定义路径常量 :在application ->config/  constants.php中增加 /*m ...

  3. YII 1.0 扩展第三方类

    扩展缩略图类在blog\protected\extensions 中建立 Image/CThumb.php 1. 自己瞎弄的,一点都不优雅 include_once Yii::app()->Ba ...

  4. 自定义 Django的User Model,扩展 AbstractUser类注意事项

    本篇主要讨论一下User Model的使用技巧. 注意, 由于Django 1.5之后user model带来了很大的变化, 本篇内容只针对django 1.5之后的版本. 1. 确定 User Mo ...

  5. ASP.NET MVC 扩展HtmlHelper类为 js ,css 资源文件添加版本号

    写在前面 在项目部署当中会需要更新 css 文件或 js 等资源文件,为了避免由于浏览器缓存的原因无法加载新的 css 或 js ,一般的做法是在资源文件的后面加上一个版本号来解决,这样浏览器就会去服 ...

  6. Scala中使用implict 扩展现有类的方法

    Scala中implict的一种用法就是扩展现有类的方法,有点类似于.Net中的扩展方法(MS对扩展方法的介绍:扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改 ...

  7. [Swift]在Swift中实现自增(++)、自减(--)运算符:利用extension扩展Int类

    自增(++).自减(--)运算符主要用在For循环中,Swift有自己更简易的循环遍历方法,而且类似x- ++x这种代码不易维护. Swift为了营造自己的编码风格,树立自己的代码精神体系,已经不支持 ...

  8. DataTable和DataRow利用反射直接转换为Model对象的扩展方法类

    DataTable和DataRow利用反射直接转换为Model对象的扩展方法类   /// <summary> /// 类 说 明:给DataTable和DataRow扩展方法,直接转换为 ...

  9. 11.Laravel5学习笔记:扩展 Validator 类

    简单介绍 在 Laravel5 中,本身已经提供了丰富的验证规则供我们使用,可是天下应用奇葩多,做为程序猿你会发现永远都有新的验证规则诞生,光是组合已经解救不了你的项目了.这个时候就须要我们扩展 Va ...

随机推荐

  1. leetcode:Partition List

    题目:Given a linked list and a value x, partition it such that all nodes less than x come before nodes ...

  2. C# WebBrowser 设置代理完全解决方案

    微软webbrowser控件也就是IE插件,他的所有功能就像IE类似,当然设置也是一样的,下面介绍下webbrowser如何设置代理,可不要用这个对抗广告联盟哦 You can change the ...

  3. Ubuntu12.04安装YouCompleteMe插件

    以前用的都是ctags+omnicomplete+acp的方式,这次换成clang自解析的方式尝试一把. 自从知道了Vundle,妈妈再也不用担心我麻烦地下插件了 0. 安装必要组件 sudo apt ...

  4. 【转载】正则表达式学习 & ASCII码表

    文章原地址: http://www.jb51.net/tools/zhengze.html <正则表达式30分钟入门教程> 其中有几个地方可以有笔记: \s 匹配任意的空白符 \b 匹配单 ...

  5. NHibernate 二级缓冲

    session.CreateCriteria(typeof(SysModuleFields)).SetCacheable(true).List<SysModuleFields>(); se ...

  6. 使用Jenkins构建持续集成环境

    简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...

  7. spring mvc 自定义转换器

    <!-- 注册转化器 --> <mvc:annotation-driven conversion-service="conversionService" /> ...

  8. HDU 1494 跑跑卡丁车

    很无爱的一道题. 题解都看得一知半解的. acm之家的题解,留着以后慢慢体会: 把这题转化为背包模型,每个%20能量算一个单位,最多有15个,如果大于5个有一个加速卡,如果大于10个有2个加速卡,如果 ...

  9. 通知(NSNotification)

    通知 一个完整的通知一般包含3个属性: - (NSString *)name; // 通知的名称 - (id)object; // 通知发布者(是谁要发布通知) - (NSDictionary *)u ...

  10. POJ 2395 Out of Hay 草荒 (MST,Kruscal,最小瓶颈树)

    题意:Bessie要从牧场1到达各大牧场去,他从不关心他要走多远,他只关心他的水袋够不够水,他可以在任意牧场补给水,问他走完各大牧场,最多的一次需要多少带多少单位的水? 思路:其实就是要让所带的水尽量 ...