美文网首页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