[SwiftUI]Color加载十六进制颜色
简单拓展了一下Color,便于加载十六进制颜色和将Color转换为十六进制字符串。
使用:
import SwiftUIstruct MPAppColor {static var ThemeColor = Color(hexString: "#000000")static var OneColor = Color(hexString: "#333333FF")static var TwoColor = Color(hexString: "#33333300")static var ThreeColor = Color(hexString: "0xEEEEEE", alpha: 0.5)}
拓展:
import Foundation
import SwiftUIextension Color {public init?(hexString: String, alpha: CGFloat? = nil) {if let rgbaArr = hexString.RGBAArr(alpha), rgbaArr.count == 4 {self.init(red: rgbaArr[0], green: rgbaArr[1], blue: rgbaArr[2], opacity: rgbaArr[3])} else {return nil}}public init?(r: Double, g: Double, b: Double) {self.init(red: r, green: g, blue: b)}public init?(r: Double, g: Double, b: Double, a: Double = 1) {self.init(red: r, green: g, blue: b, opacity: a)}/// Color转十六进制颜色字符串,包含alpha。public func RGBAHex() -> String? {let components = self.cgColor?.componentslet r: CGFloat = components?[0] ?? 0.0let g: CGFloat = components?[1] ?? 0.0let b: CGFloat = components?[2] ?? 0.0let a: CGFloat = components?[3] ?? 0.0let hexString = String(format: "#%02lX%02lX%02lX%02lX", lroundf(Float(r * 255)), lroundf(Float(g * 255)), lroundf(Float(b * 255)), lroundf(Float(a * 255)))return hexString}/// Color转十六进制颜色字符串,忽略alpha。public func RGBHex() -> String? {let components = self.cgColor?.componentslet r: CGFloat = components?[0] ?? 0.0let g: CGFloat = components?[1] ?? 0.0let b: CGFloat = components?[2] ?? 0.0let hexString = String(format: "#%02lX%02lX%02lX", lroundf(Float(r * 255)), lroundf(Float(g * 255)), lroundf(Float(b * 255)))return hexString}}extension String {/// 十六进制颜色转RGBA数组/// 若priorityAlpha有传值,就算十六进制字符串中带有alpha也优先使用priorityAlpha。func RGBAArr(_ priorityAlpha: CGFloat? = nil) -> [CGFloat]? {let hex = selfvar formatted = hex.replacingOccurrences(of: "0x", with: "")formatted = formatted.replacingOccurrences(of: "#", with: "")guard formatted.count == 6 || formatted.count == 8 else { return nil }var r: Int = 0var g: Int = 0var b: Int = 0var a: Int = 255let hexStr = formatted as NSStringlet rHex = hexStr.substring(with: NSRange(location: 0, length: 2))let gHex = hexStr.substring(with: NSRange(location: 2, length: 2))let bHex = hexStr.substring(with: NSRange(location: 4, length: 2))guard let rTen = Int(rHex, radix: 16), let gTen = Int(gHex, radix: 16), let bTen = Int(bHex, radix: 16) else {return nil}r = rTeng = gTenb = bTenif formatted.count == 8 {let aHex = hexStr.substring(with: NSRange(location: 6, length: 2))guard let aTen = Int(aHex, radix: 16) else { return nil }a = aTen}let red = CGFloat(r) / 255.0let green = CGFloat(g) / 255.0let blue = CGFloat(b) / 255.0var alpha = CGFloat(a) / 255.0if let priorityAlpha = priorityAlpha {alpha = priorityAlpha}return [red, green, blue, alpha]}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
