「 swift 」UIColor 加载十六进制颜色,标准写法带透明度
一、前言
iOS
开发对于方法的拓展实在不行,不像android
可以直接加载十六进制色值- 我在国外论坛上,看到大佬的一种写法,感觉很有用,这里分享给大家
二、实现
- 下面我将逐步提出几种方案,一步步优化,知道最后可以直接使用:
UIColor(argb: 0xFFFFFFFF)
- 建议大家一步步看下去,当然也可以直接跳到最后
CV
2.1 加载六位十六进制颜色
我们知道
#ffffff
实际上是用十六进制来表示3
种颜色,也就是:红色ff
,绿色ff
和蓝色ff
。所以你可以使用0x
前缀的十六进制表示法,来设置UIColor
,例如0xFF
- 为了简化转换,让我们先创建一个已整数
(0-255)
为参数的构造方法
extension UIColor {convenience init(red: Int, green: Int, blue: Int) {assert(red >= 0 && red <= 255, "Invalid red component")assert(green >= 0 && green <= 255, "Invalid green component")assert(blue >= 0 && blue <= 255, "Invalid blue component")self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)}convenience init(rgb: Int) {self.init(red: (rgb >> 16) & 0xFF,green: (rgb >> 8) & 0xFF,blue: rgb & 0xFF)}
}
- 在代码中的使用如下
let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF)let color2 = UIColor(rgb: 0xFFFFFF)
2.2 通过 CGFloat 设置设置透明度
如何设置
UIColor
透明度?
我们一般使用UIColor.withAlphaComponent
来设置颜色的透明度,例如
let semitransparentBlack = UIColor(rgb: 0x000000).withAlphaComponent(0.5)
- 我们可以在 2.1 的方法中,添加
withAlphaComponent()
来设置颜色的透明度 - 为了提高兼容性,我们这里将透明度作为一种可选参数传入
convenience init(red: Int, green: Int, blue: Int, a: CGFloat = 1.0) {self.init(red: CGFloat(red) / 255.0,green: CGFloat(green) / 255.0,blue: CGFloat(blue) / 255.0,alpha: a)
}convenience init(rgb: Int, a: CGFloat = 1.0) {self.init(red: (rgb >> 16) & 0xFF,green: (rgb >> 8) & 0xFF,blue: rgb & 0xFF,a: a)
}
这里我们不能将透明度参数名设置为
alpha
,因为这回与现有构造方法名称发生冲突,所以就用缩写字母a
来表示
- 使用时的示例代码如下:
let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF, a: 0.5)
let color2 = UIColor(rgb: 0xFFFFFF, a: 0.5)
2.3 已八位十六进制设置带透明度颜色 - 0xFFFFFFFF
- 如果我们要将
alpha
设为0-255
的整数,那么我们可以这样修改:
convenience init(red: Int, green: Int, blue: Int, a: Int = 0xFF) {self.init(red: CGFloat(red) / 255.0,green: CGFloat(green) / 255.0,blue: CGFloat(blue) / 255.0,alpha: CGFloat(a) / 255.0)
}// let's suppose alpha is the first component (ARGB)
convenience init(argb: Int) {self.init(red: (argb >> 16) & 0xFF,green: (argb >> 8) & 0xFF,blue: argb & 0xFF,a: (argb >> 24) & 0xFF)
}
- 使用时示例代码如下:
let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF, a: 0xFF)
let color2 = UIColor(argb: 0xFFFFFFFF)
总结
- 综上所述,大家可以根据特定的场景,选择上面方法任一方法
- 优点:使用上述任一方法都不需要传字符串
- 我在
GitHub
新建了一个仓库,正在为大家整理iOS
学习笔记,欢迎大家star
支持:https://github.com/Knowledge-Precipitation-Tribe/ios_notes - 原文链接 https://stackoverflow.com/questions/24263007/how-to-use-hex-color-values
- 感觉各位老铁们的三连关注支持,我们下期再见
「 swift 」UIColor 加载十六进制颜色,标准写法带透明度相关推荐
- iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)
新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件, #import <UIKit/UIKit.h> # ...
- iOS开发swift版异步加载网络图片(带缓存和缺省图片)
iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存. 异步加载图片的核心代码如下: ...
- PyQt5加载png图片无法显示出透明度的解决办法
参考链接 pyqt5设置按钮透明度 PyQt5 加载 png 图片无法显示出透明度 博文小记 一.问题描述 我在使用 QLabel 控件,用 QPixmap 加载 png 图片时,发现原先有透明度的图 ...
- wpfのuri(让你完全明白wpf的图片加载方式以及URI写法)
原文:wpfのuri(让你完全明白wpf的图片加载方式以及URI写法) 绝对 pack WPF URI pack://application:,,,/是协议:",,,"是" ...
- 草图大师sketchup的模型加载到cesium里显示 带贴图
草图大师sketchup的模型加载到cesium里显示 带贴图 前言 一.sketchUp导出obj格式 二.在Blender中转换数据 1.导入数据 2.调整尺寸和视图 三.cesium中加载 总结 ...
- 「HTML+CSS」--自定义加载动画【047】
前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...
- springboot配置文件加载顺序_「SpringBoot系列」配置文件加载优先级解析
SpringBoot提供了外部分配置功能,可以使用属性文件(properties).YAML(yml)文件.环境变量和命令行参数来进行处部参数配置,并t以特定的顺序来处理配置,以便于允许合理的覆盖值. ...
- 「HTML+CSS」--自定义加载动画【027】
前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...
- Swift - 表格图片加载优化(拖动表格时不加载,停止时只加载当前页图片)
列表的单元格中包含有图片在开发中很常见.通常我们可以直接在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIn ...
最新文章
- 初级管理者,如何打通任督二脉
- Django 2.1.3 中间件使用
- 邮件:事务失败。 服务器响应为:DT:SPM 163 smtp
- android intent action 介绍大全
- 西瓜书+实战+吴恩达机器学习(十一)监督学习之集成学习
- Android tombstone文件是如何生成的
- 超平面是什么?——理解超平面(SVM开篇之超平面详解)
- 论JAVA语言的优缺点
- python爬虫--看看虎牙女主播中谁最“顶”
- zotero导出PDF
- 广告市场VUCA时代来了!怎么办?
- docer 设置 拉取http协议的私有仓库
- 程序员分级-八个等级
- python拼接、剪辑视频
- node用mongodb还是mysql,Node 操作 mongoDB 数据库和 mySQL数据库
- MyBatis中的日志(LOG4J)
- Code Representation方面的Empirical Studies
- 计算机网络基础知识满昌勇,《计算机网络》说课课件.ppt
- 中柏zpad6 android x86,Windows平板轻应用 中柏EZpad 6评测
- Metasploit 【入门】
热门文章
- 嵌入式:BSP的理解
- 8.牛批了 Android 2022高级 资深面试题 一线大厂和二线大厂面试真题精选 (腾讯 附答案)第八套 35k+
- excel字符串和单元格拼接_excel单元格拼接字符串
- Android 应用访问权限设置
- Android 面试题 200 道 :全面解析
- 【deepctr】学习入门笔记01
- 中国首家云存储联合创新实验室落户武汉光谷
- 项目install的时候报错gyp ERR! find Python
- 开个性“嫁衣”店月赚万元!
- 基于Pytorch的Transformer翻译模型前期数据处理方法
- iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)