前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「 swift 」UIColor 加载十六进制颜色,标准写法带透明度

「 swift 」UIColor 加载十六进制颜色,标准写法带透明度

作者头像
圆号本昊
发布2021-09-24 11:06:58
1.9K0
发布2021-09-24 11:06:58
举报
文章被收录于专栏:github@hornhuang

一、前言

  • iOS 开发对于方法的拓展实在不行,不像 android 可以直接加载十六进制色值
  • 我在国外论坛上,看到大佬的一种写法,感觉很有用,这里分享给大家

二、实现

  • 下面我将逐步提出几种方案,一步步优化,知道最后可以直接使用:UIColor(argb: 0xFFFFFFFF)
  • 建议大家一步步看下去,当然也可以直接跳到最后 CV
2.1 加载六位十六进制颜色

我们知道 #ffffff 实际上是用十六进制来表示 3 种颜色,也就是:红色 ff,绿色 ff 和蓝色 ff。所以你可以使用 0x 前缀的十六进制表示法,来设置 UIColor,例如 0xFF

  • 为了简化转换,让我们先创建一个已整数(0-255)为参数的构造方法
代码语言:javascript
复制
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
       )
   }
}
  • 在代码中的使用如下
代码语言:javascript
复制
	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() 来设置颜色的透明度
  • 为了提高兼容性,我们这里将透明度作为一种可选参数传入
代码语言:javascript
复制
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 来表示

  • 使用时的示例代码如下:
代码语言:javascript
复制
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 的整数,那么我们可以这样修改:
代码语言:javascript
复制
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
    )
}
  • 使用时示例代码如下:
代码语言:javascript
复制
let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF, a: 0xFF)
let color2 = UIColor(argb: 0xFFFFFFFF)

总结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、实现
    • 2.1 加载六位十六进制颜色
      • 2.2 通过 CGFloat 设置设置透明度
        • 2.3 已八位十六进制设置带透明度颜色 - 0xFFFFFFFF
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档