美文网首页Swift编程
Swift3.0-16进制颜色转换UIColor

Swift3.0-16进制颜色转换UIColor

作者: 莫莫H | 来源:发表于2016-10-21 11:12 被阅读430次

    参考原文:http://www.jianshu.com/p/345fa430e44

    原楼主使用swift2.x 编写,对于swift3.0 已不能正常使用,故此针对swift3.0语法,做出以下修改。

    具体怎么新建文件,参考原文。在这里不再重复步骤,只提供修改的内容。谢谢

    import UIKit
    
    // MARK: - 给UIColor写两个类方法
    extension UIColor {
        /**
         16进制转UIColor
         
         - parameter hex: 16进制颜色字符串
         
         - returns: 转换后的颜色
         */
        class func ColorHex(hex: String) -> UIColor {
            return proceesHex(hex: hex, alpha: 1.0)
        }
        
        /**
         16进制转UIColor,
         
         - parameter hex:   16进制颜色字符串
         - parameter alpha: 透明度
         
         - returns: 转换后的颜色
         */
        class func ColorHexWithAlpha(hex: String, alpha: CGFloat) -> UIColor {
            return proceesHex(hex: hex, alpha: alpha)
        }
    }
    
    // MARK: - 主要逻辑
    private func proceesHex(hex: String, alpha: CGFloat) -> UIColor{
        /** 如果传入的字符串为空 */
        if hex.isEmpty {
            return UIColor.clear
        }
        
        
        /**
            结合swift3.0 语法,修改后的逻辑实现
         */
        
        
        /** 传进来的值。 去掉了可能包含的空格、特殊字符, 并且全部转换为大写 */
        let set = CharacterSet.whitespacesAndNewlines
        var hHex = hex.trimmingCharacters(in: set).uppercased()
        
        /** 如果处理过后的字符串少于6位 */
        if hHex.characters.count < 6 {
            return UIColor.clear
        }
        
        /** 开头是用0x开始的 */
        if hHex.hasPrefix("0X") {
            hHex = (hHex as NSString).substring(from: 2)
        }
        /** 开头是以#开头的 */
        if hHex.hasPrefix("#") {
            hHex = (hHex as NSString).substring(from: 1)
        }
        /** 开头是以##开始的 */
        if hHex.hasPrefix("##") {
            hHex = (hHex as NSString).substring(from: 2)
        }
        
        /** 截取出来的有效长度是6位, 所以不是6位的直接返回 */
        if hHex.characters.count != 6 {
            return UIColor.clear
        }
    
        /** R G B */
        var range = NSMakeRange(0, 2)
        
        /** R */
        let rHex = (hHex as NSString).substring(with: range)
        
        /** G */
        range.location = 2
        let gHex = (hHex as NSString).substring(with: range)
        
        /** B */
        range.location = 4
        let bHex = (hHex as NSString).substring(with: range)
    
        /** 类型转换 */
        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        
        Scanner(string: rHex).scanHexInt32(&r)
        Scanner(string: gHex).scanHexInt32(&g)
        Scanner(string: bHex).scanHexInt32(&b)
    
        return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: alpha)
    }
    
    使用方法同理:
    view.backgroundColor = UIColor.ColorHex(hex: "#f39723")
    view.backgroundColor = UIColor.ColorHexWithAlpha(hex: "#f39723", alpha: 0.7)
    
    

    相关文章

      网友评论

        本文标题:Swift3.0-16进制颜色转换UIColor

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