美文网首页SwiftUI
SwiftUI-十六进制字符串转颜色

SwiftUI-十六进制字符串转颜色

作者: Augs | 来源:发表于2019-12-06 16:34 被阅读0次

    创建类ColorExtension.swift
    代码如下:

    import SwiftUI
    
    extension Color {
        init?(hex: String){
            let r, g, b, a: CGFloat
    
            if hex.hasPrefix("#") {
                let start = hex.index(hex.startIndex, offsetBy: 1)
                let hexColor = String(hex[start...])
    
                if hexColor.count == 6 {
                    let scanner = Scanner(string: hexColor)
                    var hexNumber: UInt64 = 0
    
                    if scanner.scanHexInt64(&hexNumber) {
                        r = CGFloat((hexNumber & 0xff0000) >> 16) / 255
                        g = CGFloat((hexNumber & 0x00ff00) >> 8) / 255
                        b = CGFloat(hexNumber & 0x0000ff) / 255
                        a = 255 / 255
    
                        self.init(red: Double(r), green: Double(g), blue: Double(b))
                        _ = self.opacity(Double(a))
                        return
                    }
                }
            }
            return nil
        }
    }
    

    如果十六进制颜色中需要包含透明度则将代码做如下修改:

    extension Color {
        init?(hex: String){
            let r, g, b, a: CGFloat
    
            if hex.hasPrefix("#") {
                let start = hex.index(hex.startIndex, offsetBy: 1)
                let hexColor = String(hex[start...])
                
                //从此处开始修改
                if hexColor.count == 8 {
                    let scanner = Scanner(string: hexColor)
                    var hexNumber: UInt64 = 0
    
                    if scanner.scanHexInt64(&hexNumber) {
                        r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
                        g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
                        b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
                        a = CGFloat(hexNumber & 0x000000ff) / 255
    
                        self.init(red: Double(r), green: Double(g), blue: Double(b))
                        _ = self.opacity(Double(a))
                        return
                    }
                }
            }
            return nil
        }
    }
    

    使用方法:

    Text("Hello, World")
        .foregroundColor(Color(hex: "#FA651C"))
    

    相关文章

      网友评论

        本文标题:SwiftUI-十六进制字符串转颜色

        本文链接:https://www.haomeiwen.com/subject/euyegctx.html