我们在做iOS开发,给一个 view添背景颜色时,一般都是用到RGB颜色,比如下面这样的
self.view.backgroundColor=[UIColor colorWithRed:0.578 green:0.720 blue:1.000 alpha:1.000];
然后美工给我们作图的时候往往给我们的色值都是十六进制的颜色, 比如这样的
十六进制的色值如果老大不管你的话,可以直接用滴管直接吸取这个颜色,但是一般情况下都会有误差,所以笔者不建议这么用,这需要将#6cabdf
转换成UIColor供我们使用,笔者写了一个UIColor拓展的类方法直接调用,方便简洁,调用如下。
首先导入
//建议写到.pch文件中 方便全项目调用
#import "UIColor+ColorChange.h"
调用的时候直接传入#6cabdf即可
self.view.backgroundColor=[UIColor colorWithHexString:@"#6cabdf"];
运行效果图:
模拟器部分截图这样颜色基本上就跟美工给的颜色一样啦。
具体实现方法如下,
在UIColor+ColorChange.h
中
#import <UIKit/UIKit.h>
@interface UIColor (ColorChange)
// 颜色转换:iOS中(以#开头)十六进制的颜色转换为UIColor(RGB)
+ (UIColor *) colorWithHexString: (NSString *)color;
@end
在UIColor+ColorChange.m
中
#import "UIColor+ColorChange.h"
@implementation UIColor (ColorChange)
+ (UIColor *) colorWithHexString: (NSString *)color
{
NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
// String should be 6 or 8 characters
if ([cString length] < 6) {
return [UIColor clearColor];
}
// 判断前缀
if ([cString hasPrefix:@"0X"])
cString = [cString substringFromIndex:2];
if ([cString hasPrefix:@"#"])
cString = [cString substringFromIndex:1];
if ([cString length] != 6)
return [UIColor clearColor];
// 从六位数值中找到RGB对应的位数并转换
NSRange range;
range.location = 0;
range.length = 2;
//R、G、B
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
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:1.0f];
}
@end
基本实现方法就是这样啦,有需要的或者感兴趣的朋友可以复制直接带走,如果使用过程中遇到问题,可以再联系笔者,笔者再尽力修改修改,如果觉得笔者写的还行,可以关注一下笔者,笔者不定期分享一些好玩的实用的类方法和demo给大家。
笔者的其他文章:
iOS开发-轻松学会封装自定义视图view(自定义弹框封装详解)
http://www.jianshu.com/p/de2ecfd770c2
iOS开发-两句代码快速实现无限轮播图(基于ScrollView封装)
http://www.jianshu.com/p/d240bd977689
iOS开发-一句代码调用实现网络的监测功能(基于AFNetworkReachabilityManager的封装)
http://www.jianshu.com/p/b901ad0c1d81
如果有不足或者错误的地方还望各位读者批评指正,可以评论留言,笔者收到后第一时间回复。
QQ/微信:790057066 。
简书号:iOS_凯:http://www.jianshu.com/users/86b0ddc92021/latest_articles
GitHub个人主页:https://github.com/18811314750
欢迎各位前来指教,star,感谢各位的阅读。
网友评论
一个宏定义就OK了
调用 UIColorFromHex(0xffffff)
```swift
func UIColorFromRGB(rgbValue: UInt) -> UIColor {
return UIColor(
red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
alpha: CGFloat(1.0)
)
}
```
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]/// rgb颜色转换(16进制->10进制)
两个宏定义,原理差不多,这个代码量更少点!
第一个应该能看懂,第二个带入16进制的颜色值