• [Swift]扩展UIColor:实现十六进制颜色字符串与UIColor之间的相互转换


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10647238.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    对【UIColor】进行扩展

     1 import UIKit
     2  
     3 extension UIColor {
     4      
     5     // Hex String -> UIColor
     6     convenience init(hexString: String) {
     7         let hexString = hexString.trimmingCharacters(in: .whitespacesAndNewlines)
     8         let scanner = Scanner(string: hexString)
     9          
    10         if hexString.hasPrefix("#") {
    11             scanner.scanLocation = 1
    12         }
    13          
    14         var color: UInt32 = 0
    15         scanner.scanHexInt32(&color)
    16          
    17         let mask = 0x000000FF
    18         let r = Int(color >> 16) & mask
    19         let g = Int(color >> 8) & mask
    20         let b = Int(color) & mask
    21          
    22         let red   = CGFloat(r) / 255.0
    23         let green = CGFloat(g) / 255.0
    24         let blue  = CGFloat(b) / 255.0
    25          
    26         self.init(red: red, green: green, blue: blue, alpha: 1)
    27     }
    28      
    29     // UIColor -> Hex String
    30     var hexString: String? {
    31         var red: CGFloat = 0
    32         var green: CGFloat = 0
    33         var blue: CGFloat = 0
    34         var alpha: CGFloat = 0
    35          
    36         let multiplier = CGFloat(255.999999)
    37          
    38         guard self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) else {
    39             return nil
    40         }
    41          
    42         if alpha == 1.0 {
    43             return String(
    44                 format: "#%02lX%02lX%02lX",
    45                 Int(red * multiplier),
    46                 Int(green * multiplier),
    47                 Int(blue * multiplier)
    48             )
    49         }
    50         else {
    51             return String(
    52                 format: "#%02lX%02lX%02lX%02lX",
    53                 Int(red * multiplier),
    54                 Int(green * multiplier),
    55                 Int(blue * multiplier),
    56                 Int(alpha * multiplier)
    57             )
    58         }
    59     }
    60 }

    测试示例:

    1 // 16进制颜色 -> UIColor
    2 let color = UIColor(hexString: "#A1A1A1")
    3 print("UIColor:", color)
    4          
    5 // UIColor -> 16进制颜色
    6 let hexString = color.hexString
    7 print("16进制颜色值:", hexString ?? "")

    测试结果:

    1 UIColor: UIExtendedSRGBColorSpace 0.631373 0.631373 0.631373 1
    2 16进制颜色值: #A1A1A1
  • 相关阅读:
    [CQOI2011]放棋子
    [JSOI2015]染色问题
    [ZJOI2016]小星星
    [NOI2018]你的名字
    bzoj2393 Cirno的完美算数教室
    [CQOI2012]局部极小值
    CF768F Barrels and boxes
    bzoj4402 Claris的剑
    烽火SATA SSD DSS200-B
    添加防火墙规则
  • 原文地址:https://www.cnblogs.com/strengthen/p/10647238.html
Copyright © 2020-2023  润新知