十六进制颜色工具类

简介: 十六进制颜色工具类

十六进制颜色工具类


颜色相关的一些知识

  • 颜色的基本组成
  • 一种颜色由N个颜色通道组成
  • 颜色通道
  • 1个颜色通道占据8bit
  • 1个颜色通道的取值范围
  • 10进制 : [0, 255]
  • 16进制 : [00, ff];
  • 常见的颜色通道
  • 红色 red R
  • 绿色 green G
  • 蓝色 blue B
  • 透明度 alpha A
  • R\G\B一样的是灰色
  • 颜色的种类
  • 24bit颜色
  • 由R\G\B组成的颜色
  • 常见的表示形式
  • 10进制(仅仅是用在CSS)
  • 红色 : rgb(255,0,0)
  • 绿色 : rgb(0,255,0)
  • 蓝色 : rgb(0,0,255)
  • 黄色 : rgb(255,255,0)
  • 黑色 : rgb(0,0,0)
  • 白色 : rgb(255,255,255)
  • 灰色 : rgb(80,80,80)
  • 16进制(可以用在CSS\android)
  • 红色 : #ff0000  #f00
  • 绿色 : #00ff00  #0f0
  • 蓝色 : #0000ff  #00f
  • 黄色 : #ffff00  #ff0
  • 黑色 : #000000  #000
  • 白色 : #ffffff  #fff
  • 灰色 : #979797
  • 32bit颜色
  • 由R\G\B\A组成的颜色
  • 常见的表示形式
  • 10进制(仅仅是用在CSS)
  • 红色 : rgba(255,0,0,255)
  • 绿色 : rgba(0,255,0,255)
  • 蓝色 : rgba(0,0,255,255)
  • 黄色 : rgba(255,255,0,255)
  • 黑色 : rgba(0,0,0,255)
  • 白色 : rgba(255,255,255,255)
  • 16进制(#AARRGGBB,  仅仅是用在android)
  • 红色 : #ffff0000
  • 绿色 : #ff00ff00
  • 蓝色 : #ff0000ff
  • 黄色 : #ffffff00
  • 黑色 : #ff000000
  • 白色 : #ffffffff

下面开始写工具类

30ad24b8e29c39f89db1dbbf6e5ddba0.png

Snip20170209_1.png

21f97a5f6925408425334cf5a07382de.png

Snip20170209_1.png

在.h文件中

7d3c01fbe42f52f012b95de330c56dfe.png

Snip20170209_2.png

代码呈上

// 默认alpha位1
+ (UIColor *)colorWithHexString:(NSString *)color;
//从十六进制字符串获取颜色,
//color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;

在.m文件中

7ac427a897d3c0682838e15df7ad2edc.png

Snip20170209_5.png

b65688741da45dad06149bd4d3852d3b.png

Snip20170209_6.png

代码呈上

#import "UIColor+Hex.h"
@implementation UIColor (Hex)
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha
{
    //删除字符串中的空格
    NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
    // String should be 6 or 8 characters
    if ([cString length] < 6)
    {
        return [UIColor clearColor];
    }
    // strip 0X if it appears
    //如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾
    if ([cString hasPrefix:@"0X"])
    {
        cString = [cString substringFromIndex:2];
    }
    //如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾
    if ([cString hasPrefix:@"#"])
    {
        cString = [cString substringFromIndex:1];
    }
    if ([cString length] != 6)
    {
        return [UIColor clearColor];
    }
    // Separate into r, g, b substrings
    NSRange range;
    range.location = 0;
    range.length = 2;
    //r
    NSString *rString = [cString substringWithRange:range];
    //g
    range.location = 2;
    NSString *gString = [cString substringWithRange:range];
    //b
    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:alpha];
}
//默认alpha值为1
+ (UIColor *)colorWithHexString:(NSString *)color
{
    return [self colorWithHexString:color alpha:1.0f];
}
@end

使用

974bd3c669caadf443399461e66e580a.png

Snip20170209_9.png

相关文章
|
缓存 资源调度 前端开发
从0到1带你用webpack 5构建monorepo项目——上篇(二)
别名配置 对于ts+webpack 的「monorepo」项目 别名的配置有 两种 1. 第一个是在tsConfig 中的别名配置, 这个配置的好处方便 子项目中 互相引用 2. 第二个是在webpack 中配置别名, 为了可以少写很长路径, 同时打包的时候也能找到文件。 1. 如上图 我 在 「3d」 这个项目 我想引用 「utils」 中的方法, 首先这两个项目 分别都 是单独的项目, 都有自己的「tsConfig.json」 文件 为了 防止ts 报错 我们项目根目录的 「tsConfig.json」 配置下别名 "baseUrl": "./packages", // 根路径 路径
从0到1带你用webpack 5构建monorepo项目——上篇(二)
|
机器学习/深度学习 编解码 固态存储
超轻目标检测 | 超越 NanoDet-Plus、YOLOv4-Tiny实时性、高精度都是你想要的!
超轻目标检测 | 超越 NanoDet-Plus、YOLOv4-Tiny实时性、高精度都是你想要的!
1226 0
超轻目标检测 | 超越 NanoDet-Plus、YOLOv4-Tiny实时性、高精度都是你想要的!
|
消息中间件 Java
【实战揭秘】如何运用Java发布-订阅模式,打造高效响应式天气预报App?
【8月更文挑战第30天】发布-订阅模式是一种消息通信模型,发送者将消息发布到公共队列,接收者自行订阅并处理。此模式降低了对象间的耦合度,使系统更灵活、可扩展。例如,在天气预报应用中,`WeatherEventPublisher` 类作为发布者收集天气数据并通知订阅者(如 `TemperatureDisplay` 和 `HumidityDisplay`),实现组件间的解耦和动态更新。这种方式适用于事件驱动的应用,提高了系统的扩展性和可维护性。
380 2
|
数据采集 机器学习/深度学习 人工智能
AI时代的流量博弈:代理IP如何赋能智能应用突围
在AI时代,流量获取成为互联网发展的关键挑战。本文探讨代理IP技术如何助力AI应用突破流量困境。从身份伪装、地域突破到并发采集,代理IP为数据收集与智能应用提供支持。同时,文章分析不同类型代理IP的特点及应用场景,并强调合规使用的重要性。未来,边缘计算和AI将与代理IP深度融合,推动更高效的数据流通模式,助力AI应用实现增长突破。
328 7
AI时代的流量博弈:代理IP如何赋能智能应用突围
|
运维 Linux 应用服务中间件
Linux的完全本地仓库搭建指南(科普扫盲贴)
Linux的完全本地仓库搭建指南(科普扫盲贴)
1203 0
Linux的完全本地仓库搭建指南(科普扫盲贴)
|
人工智能 数据处理 Python
🔍数据侦探的AI助手:Prompt技巧大公开,洞察商业先机不手软
【8月更文挑战第1天】在数据驱动时代,AI助手作为数据侦探的强大伙伴,通过精心设计的AI Prompt技巧帮助解析复杂市场。案例中,一电商平台欲进入新兴市场,面临数据挑战。初始Prompt聚焦消费者偏好及影响因素分析。为进一步深化洞察,Prompt加入节假日购物模式、商品类别偏好及社交媒体影响等细节。结合领域知识,优化Prompt关注价格敏感度与定制化营销策略。最终,AI助手生成的报告揭示了消费者行为模式,并提出市场策略建议,助力电商成功布局新兴市场。此过程展示了AI Prompt在商业洞察中的关键作用,预示着其在未来洞察之旅中的广阔前景。
605 2
|
存储 JSON API
微服务框架 go-zero logx 日志组件剖析
微服务框架 go-zero logx 日志组件剖析
867 0
|
设计模式 XML 缓存
Android体系课学习 之 网络请求库Retrofit源码分析-看这一篇就够了
- 网络请求在我们开发中起的很大比重,有一个好的网络框架可以节省我们的开发工作量,也可以避免一些在开发中不该出现的bug - *Retrofit*是一个轻量级框架,基于*OkHttp*的一个*Restful*框架