美文网首页iOS开发iOS学习iOS
iOS开发-一句代码轻松实现十六进制颜色(#开头)转RGB颜色

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

作者: iOS_凯 | 来源:发表于2016-07-15 10:57 被阅读16442次

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

相关文章

网友评论

  • 大江山岚_f450:#define UIColorFromHex(s) [UIColor colorWithRed:(((s & 0xFF0000) >> 16 )) / 255.0 green:((( s & 0xFF00 ) >> 8 )) / 255.0 blue:(( s & 0xFF )) / 255.0 alpha:1.0]
    一个宏定义就OK了
    调用 UIColorFromHex(0xffffff)
  • c57dddf3b833:swift 方法
    ```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)
    )
    }
    ```
    iOS_凯:@c57dd 感谢分享:+1:
  • 管饱饱:#define RGB(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]

    #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进制的颜色值
    iOS_凯:如果颜色值是以#开头的怎么用这个宏定义呢
    iOS_凯:@管饱饱 感谢分享:+1:
    iOS_凯:@管饱饱 :smile:好样的

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

本文链接:https://www.haomeiwen.com/subject/gowejttx.html