zoukankan      html  css  js  c++  java
  • Swift

     

    Swift UIColor 16进制编码转换RGB :

    由于UI出图的时候,通常给的是16进制的编码颜色,我们在开发的时候需要将它转换为RGB格式,现在给出两种代码片段.

    一、对UIColor进行扩展

    复制代码
     1 extension UIColor {
     2 
     3     /**
     4      Make color with hex string
     5      - parameter hex: 16进制字符串
     6      - returns: RGB
     7      */
     8     static func colorWithHexString (hex: String) -> UIColor {
     9 
    10         var cString: String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString
    11 
    12         if (cString.hasPrefix("#")) {
    13             cString = (cString as NSString).substringFromIndex(1)
    14         }
    15 
    16         if (cString.characters.count != 6) {
    17             return UIColor.grayColor()
    18         }
    19 
    20         let rString = (cString as NSString).substringToIndex(2)
    21         let gString = ((cString as NSString).substringFromIndex(2) as NSString).substringToIndex(2)
    22         let bString = ((cString as NSString).substringFromIndex(4) as NSString).substringToIndex(2)
    23 
    24         var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
    25         NSScanner(string: rString).scanHexInt(&r)
    26         NSScanner(string: gString).scanHexInt(&g)
    27         NSScanner(string: bString).scanHexInt(&b)
    28 
    29         return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
    30     }
    31 }
    复制代码

    二、简便方法,直接调用代码片段

    个人推荐使用这个方法,创建一个宏定义文件

    复制代码
     1 func kRGBColorFromHex(rgbValue: Int) -> (UIColor) {
     2 
     3         return UIColor(red: ((CGFloat)((rgbValue & 0xFF0000) >> 16)) / 255.0,
     4                  green: ((CGFloat)((rgbValue & 0xFF00) >> 8)) / 255.0,
     5                   blue: ((CGFloat)(rgbValue & 0xFF)) / 255.0,
     6                  alpha: 1.0)
     7 }
     8 
     9 可以这样调用
    10 kRGBColorFromHex(0x1D1D26)
    复制代码

     

         

         在实际开发中,我们拿到的设计图上的颜色往往标注的是十六进制的,而在不添加第三方库的情况下 UIColor 并不支持从十六进制数字初始化,手动将十六进制颜色转化为 RGB 形式十分浪费精力,我们可以通过为 UIColor 添加扩展的方式来支持直接从十六进制数值初始化从而为我们的开发带来便利。


    1.添加文件

    在项目中添加一个用于编写扩展代码的文件,将其命名为 UIColor+valueRGB.swift

    2.添加扩展代码

    在第一步创建的文件中添加如下代码:

    import UIKit
    
    extension UIColor {
        //用数值初始化颜色,便于生成设计图上标明的十六进制颜色
        convenience init(valueRGB: UInt, alpha: CGFloat) {
            self.init(
                red: CGFloat((valueRGB & 0xFF0000) >> 16) / 255.0,
                green: CGFloat((valueRGB & 0x00FF00) >> 8) / 255.0,
                blue: CGFloat(valueRGB & 0x0000FF) / 255.0,
                alpha: alpha
            )
        }
    }

    3.调用

    然后我们就可以在工程中以如下方式直接从十六进制数字初始化 UIColor 了:

    let testColor = UIColor(valueRGB: 0x666666, alpha: 1.0)





    Swift - UIColor使用自定义的RGB配色 

    1,比如rgb 色值为55、 186 、89 那么给UIColor设置里面要除以255
    1
    UIColor(red: 55/255, green: 186/255, blue: 89/255, alpha: 0.5)

    2,设置16进制颜色也同上
    1
    UIColor(red: 0x37/255, green: 0xba/255, blue: 0x46/255, alpha: 0.5)
     
     

    实际上这里没有做十六进制的限定,只需要是 UInt 类型都可以

  • 相关阅读:
    [DFNews] Nuix公司推出培训及认证体系
    [CFNews] Oxygen官方对于新版XRY与之冲突问题的官方解释
    [DFNews] FBI Documents Shine Light on Clandestine Cellphone Tracking Tool
    [CFNews] Be first to get Oxygen Forensic Suite 5.0 just before the End of the World!
    [DFNews] CelleBrite发布2013年移动设备取证趋势与预测白皮书
    [转载] Retrieving Data from an iPhone Voicemail Database
    [转载] 我们从未改变:弱密码仍是最常用的密码
    [DFNews] US students get cracking on Chinese malware code
    [转载] 25GPU cluster cracks every standard Windows password in <6 hours
    [手机取证] Forwarding SMS to Email on [Jailbroken] iOS
  • 原文地址:https://www.cnblogs.com/gongyuhonglou/p/10311555.html
Copyright © 2011-2022 走看看