Swift 16进制编码转UIColor

话不多说啊,直接上代码


import UIKit

// MARK: 通过16进制初始化UIColor
extension UIColor {
    
    convenience init?(hexNum: Int) {
        self.init(hexStr: String(hexNum, radix: 16))
    }
    
    convenience init?(hexStr: String) {
        var hex = hexStr.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        if hex.hasPrefix("#") {
            hex.remove(at: hex.startIndex)
        }
        if hex.hasPrefix("0x") || hex.hasPrefix(("0X")) {
            hex.removeSubrange((hex.startIndex ..< hex.index(hex.startIndex, offsetBy: 2)))
        }
        
        guard let hexNum = Int(hex, radix: 16) else {
            self.init()
            return nil
        }
        switch hex.characters.count {
        case 3:
            self.init(red: CGFloat(((hexNum & 0xF00) >> 8).duplicate4bits) / 255.0,
                      green: CGFloat(((hexNum & 0x0F0) >> 4).duplicate4bits) / 255.0,
                      blue: CGFloat((hexNum & 0x00F).duplicate4bits) / 255.0,
                      alpha: 1.0)
        case 4:
            self.init(red: CGFloat(((hexNum & 0xF000) >> 12).duplicate4bits) / 255.0,
                      green: CGFloat(((hexNum & 0x0F00) >> 8).duplicate4bits) / 255.0,
                      blue: CGFloat(((hexNum & 0x00F0) >> 4).duplicate4bits) / 255.0,
                      alpha: CGFloat((hexNum & 0x000F).duplicate4bits) / 255.0)
        case 6:
            self.init(red: CGFloat((hexNum & 0xFF0000) >> 16) / 255.0,
                      green: CGFloat((hexNum & 0x00FF00) >> 8) / 255.0,
                      blue: CGFloat((hexNum & 0x0000FF) >> 0) / 255.0,
                      alpha: 1.0)
        case 8:
            self.init(red: CGFloat((hexNum & 0xFF000000) >> 24) / 255.0,
                      green: CGFloat((hexNum & 0x00FF0000) >> 16) / 255.0,
                      blue: CGFloat((hexNum & 0x0000FF00) >> 8) / 255.0,
                      alpha: CGFloat(hexNum & 0x000000FF) / 255.0)
        default:
            self.init()
            return nil
        }
    }
    
}

private extension Int {
    var duplicate4bits: Int {
        return self << 4 + self
    }
}

** 用法如下:**

let colorR = UIColor(hexStr: "0xf00f")
let colorG = UIColor(hexStr: "0X0f0f")
let colorB = UIColor(hexStr: "#0fff")

let colorRR = UIColor(hexStr: "0xff0000ff")
let colorGG = UIColor(hexStr: "0X00ff00ff")
let colorBB = UIColor(hexStr: "#0000ffff")

let colorRN = UIColor(hexNum: 0xf00f)
let colorGN = UIColor(hexNum: 0x00ff00)
let colorBN = UIColor(hexNum: 0x0000ff)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,025评论 25 709
  • 柴关乡的绿水池村我已经去过几次了,都是走马观花,蜻蜓点水,像今天这样,用一天时间在这个小村子里细细咂摸,慢慢品悟,...
    阿果悠悠阅读 4,296评论 0 0
  • 等待喜欢的人回来身边的感觉 如同那大年三十晚上的小孩子 迫切期盼着大年初一的来临 期盼着见到他的那一刻 又害怕真的...
    小丫要变小e阅读 1,355评论 0 0
  • 判断你自己是不是一个内向者, 最重要的一个特征就是: 在跟别人相处一段时间后, 你是否需要时间来恢复精力、舒缓压力...
    鱼子酱的生活阅读 3,505评论 0 0
  • 前些天我们领导在训斥小弟说:“你们遇事要学会分析跟应对,要多深入了解问题,不要把问题看得太浅显,这样不利于沟通与有...
    华枫阅读 5,023评论 0 1

友情链接更多精彩内容