iOS开发iOS学习iOS

iOS开发-一句代码轻松实现十六进制颜色(#开头)转RGB颜色

2016-07-15  本文已影响16442人  iOS_凯

我们在做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,感谢各位的阅读。

上一篇下一篇

猜你喜欢

热点阅读