Swift 十六进制颜色字符串的自定义

参考了很多文章,集成一下,封装成两个文件,方便调用。做个笔记顺序如下。

1、首先新建一个swift文件,用来扩展UIColor。调用的时候输入的颜色字符串务必要写标准的长度。长度为6个或者8个。(当然,如果想自由一些的话,可以修改代码的处理字符串部分,省略或者补齐颜色位)。

import Foundation
import UIKit

extension UIColor {
    /// 使用字符串方式生成自定义颜色。颜色格式0xAABBCCDD、#AABBCCDD
    /// 务必输入标准的颜色字符串格式。即#aabbcc、#aabbccdd
    convenience init(colorStr: String) {
        var colorString = colorStr.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()
        
        /// 如果字符串不符合长度要求则返回默认颜色
        if colorString.count < 6 {
            self.init(red: 0, green: 0, blue: 0, alpha: 1.0)
            return
        }
        
        /// 截取后面的颜色字符数据
        if colorString.hasPrefix("0x") || colorString.hasPrefix("0X"){
            colorString = (colorString as NSString).substring(from: 2)
        }
        if colorString.hasPrefix("#") {
            colorString = (colorString as NSString).substring(from: 1)
        }
        
        /// 判断截取后的颜色字符串长度
        if colorString.count < 6 {
            self.init(red: 0, green: 0, blue: 0, alpha: 1.0)
            return
        }
        
        var rang = NSRange()
        rang.location = 0
        rang.length = 2
        
        /// 处理六位字符串长度,即没有透明度。否则处理包含字符透明度。
        if colorString.count == 6 {
            let rString = (colorString as NSString).substring(with: rang)
            rang.location = 2
            let gString = (colorString as NSString).substring(with: rang)
            rang.location = 4
            let bString = (colorString as NSString).substring(with: rang)
       
            var r:UInt64 = 0, g:UInt64 = 0,b: UInt64 = 0
            
            Scanner(string: rString).scanHexInt64(&r)
            Scanner(string: gString).scanHexInt64(&g)
            Scanner(string: bString).scanHexInt64(&b)

            print("AAA---  无透明度=r:\(rString),g:\(gString),b:\(bString)")
            
            let red = CGFloat(r) / 255.0
            let green = CGFloat(g) / 255.0
            let blue = CGFloat(b) / 255.0
            
            print("AAA---  无透明度RGB值=r:\(red),g:\(green),b:\(blue)")
            
            self.init(red: red, green: green, blue: blue, alpha: 1)
            return
        } else {
            let aString = (colorString as NSString).substring(with: rang)
            rang.location = 2
            let rString = (colorString as NSString).substring(with: rang)
            rang.location = 4
            let gString = (colorString as NSString).substring(with: rang)
            rang.location = 6
            let bString = (colorString as NSString).substring(with: rang)
            
            print("AAA---  有透明度=a:\(aString),r:\(rString),g:\(gString),b:\(bString)")
            
            var r:UInt64 = 0, g:UInt64 = 0,b: UInt64 = 0, a: UInt64 = 0
            
            Scanner(string: rString).scanHexInt64(&r)
            Scanner(string: gString).scanHexInt64(&g)
            Scanner(string: bString).scanHexInt64(&b)
            
            Scanner(string: aString).scanHexInt64(&a)
            
            let red = CGFloat(r) / 255.0
            let green = CGFloat(g) / 255.0
            let blue = CGFloat(b) / 255.0
            let alp = CGFloat(a) / 255.0
            
            print("AAA---  有透明度ARGB值=a:\(alp),r:\(red),g:\(green),b:\(blue)")
            
            self.init(red: red, green: green, blue: blue, alpha: alp)
            return
        }
    }
}

2、新建一个swift文件来自定义一些颜色字符串。这是从android的xml拷贝过来的,在android sudio很容易观看实际的效果。这里直接搬运一些常用的。

import Foundation

struct MyColor {
    /// 以下是自定义颜色表
    static let background_home = "#f0f0f0"
    
    
    /// 以下是常用颜色表
    static let transparent = "#00000000"
    static let transparent_20 = "#CC000000"
    static let transparent_30 = "#B3000000"
    static let transparent_40 = "#99000000"
    static let transparent_50 = "#80000000"
    static let transparent_80 = "#34000000"
    static let transparent_90 = "#19000000"

    static let amber_100 = "#ffecb3"
    static let amber_200 = "#ffe082"
    static let amber_300 = "#ffd54f"
    static let amber_400 = "#ffca28"
    static let amber_50 = "#fff8e1"
    static let amber_500 = "#ffc107"
    static let amber_600 = "#ffb300"
    static let amber_700 = "#ffa000"
    static let amber_800 = "#ff8f00"
    static let amber_900 = "#ff6f00"
    static let amber_a100 = "#ffe57f"
    static let amber_a200 = "#ffd740"
    static let amber_a400 = "#ffc400"
    static let amber_a700 = "#ffab00"

    static let black = "#000000"
    static let black_alpha_16 = "#10000000"
    static let black_alpha_32 = "#20000000"
    static let black_alpha_48 = "#30000000"
    static let black_alpha_64 = "#40000000"
    static let black_alpha_80 = "#50000000"
    static let black_alpha_96 = "#60000000"
    static let black_alpha_112 = "#70000000"
    static let black_alpha_128 = "#80000000"
    static let black_alpha_144 = "#90000000"
    static let black_alpha_160 = "#a0000000"
    static let black_alpha_176 = "#b0000000"
    static let black_alpha_192 = "#c0000000"
    static let black_alpha_208 = "#d0000000"
    static let black_alpha_224 = "#e0000000"
    static let black_alpha_240 = "#f0000000"
    
    static let blue_50 = "#e7e9fd"
    static let blue_100 = "#d0d9ff"
    static let blue_200 = "#afbfff"
    static let blue_300 = "#91a7ff"
    static let blue_400 = "#738ffe"
    static let blue_500 = "#5677fc"
    static let blue_600 = "#4e6cef"
    static let blue_700 = "#455ede"
    static let blue_800 = "#3b50ce"
    static let blue_900 = "#2a36b1"
    static let blue_a100 = "#a6baff"
    static let blue_a200 = "#6889ff"
    static let blue_a400 = "#4d73ff"
    static let blue_a700 = "#4d69ff"

    static let blue_grey_50 = "#eceff1"
    static let blue_grey_100 = "#cfd8dc"
    static let blue_grey_200 = "#b0bec5"
    static let blue_grey_300 = "#90a4ae"
    static let blue_grey_400 = "#78909c"
    static let blue_grey_500 = "#607d8b"
    static let blue_grey_600 = "#546e7a"
    static let blue_grey_700 = "#455a64"
    static let blue_grey_800 = "#37474f"
    static let blue_grey_900 = "#263238"

    static let brown_50 = "#efebe9"
    static let brown_100 = "#d7ccc8"
    static let brown_200 = "#bcaaa4"
    static let brown_300 = "#a1887f"
    static let brown_400 = "#8d6e63"
    static let brown_500 = "#795548"
    static let brown_600 = "#6d4c41"
    static let brown_700 = "#5d4037"
    static let brown_800 = "#4e342e"
    static let brown_900 = "#3e2723"

    static let cyan_50 = "#e0f7fa"
    static let cyan_100 = "#b2ebf2"
    static let cyan_200 = "#80deea"
    static let cyan_300 = "#4dd0e1"
    static let cyan_400 = "#26c6da"
    static let cyan_500 = "#00bcd4"
    static let cyan_600 = "#00acc1"
    static let cyan_700 = "#0097a7"
    static let cyan_800 = "#00838f"
    static let cyan_900 = "#006064"
    static let cyan_a100 = "#84ffff"
    static let cyan_a200 = "#18ffff"
    static let cyan_a400 = "#00e5ff"
    static let cyan_a700 = "#00b8d4"

    static let deep_orange_50 = "#fbe9e7"
    static let deep_orange_100 = "#ffccbc"
    static let deep_orange_200 = "#ffab91"
    static let deep_orange_300 = "#ff8a65"
    static let deep_orange_400 = "#ff7043"
    static let deep_orange_500 = "#ff5722"
    static let deep_orange_600 = "#f4511e"
    static let deep_orange_700 = "#e64a19"
    static let deep_orange_800 = "#d84315"
    static let deep_orange_900 = "#bf360c"
    static let deep_orange_a100 = "#ff9e80"
    static let deep_orange_a200 = "#ff6e40"
    static let deep_orange_a400 = "#ff3d00"
    static let deep_orange_a700 = "#dd2c00"

    static let deep_purple_50 = "#ede7f6"
    static let deep_purple_100 = "#d1c4e9"
    static let deep_purple_200 = "#b39ddb"
    static let deep_purple_300 = "#9575cd"
    static let deep_purple_400 = "#7e57c2"
    static let deep_purple_500 = "#673ab7"
    static let deep_purple_600 = "#5e35b1"
    static let deep_purple_700 = "#512da8"
    static let deep_purple_800 = "#4527a0"
    static let deep_purple_900 = "#311b92"
    static let deep_purple_a100 = "#b388ff"
    static let deep_purple_a200 = "#7c4dff"
    static let deep_purple_a400 = "#651fff"
    static let deep_purple_a700 = "#6200ea"

    static let green_50 = "#d0f8ce"
    static let green_100 = "#a3e9a4"
    static let green_200 = "#72d572"
    static let green_300 = "#42bd41"
    static let green_400 = "#2baf2b"
    static let green_500 = "#259b24"
    static let green_600 = "#0a8f08"
    static let green_700 = "#0a7e07"
    static let green_800 = "#056f00"
    static let green_900 = "#0d5302"
    static let green_a100 = "#a2f78d"
    static let green_a200 = "#5af158"
    static let green_a400 = "#14e715"
    static let green_a700 = "#12c700"

    static let grey_50 = "#fafafa"
    static let grey_100 = "#f5f5f5"
    static let grey_200 = "#eeeeee"
    static let grey_300 = "#e0e0e0"
    static let grey_400 = "#bdbdbd"
    static let grey_500 = "#9e9e9e"
    static let grey_600 = "#757575"
    static let grey_700 = "#616161"
    static let grey_800 = "#424242"
    static let grey_900 = "#212121"

    static let indigo_50 = "#e8eaf6"
    static let indigo_100 = "#c5cae9"
    static let indigo_200 = "#9fa8da"
    static let indigo_300 = "#7986cb"
    static let indigo_400 = "#5c6bc0"
    static let indigo_500 = "#3f51b5"
    static let indigo_600 = "#3949ab"
    static let indigo_700 = "#303f9f"
    static let indigo_800 = "#283593"
    static let indigo_900 = "#1a237e"
    static let indigo_a100 = "#8c9eff"
    static let indigo_a200 = "#536dfe"
    static let indigo_a400 = "#3d5afe"
    static let indigo_a700 = "#304ffe"

    static let light_blue_50 = "#e1f5fe"
    static let light_blue_100 = "#b3e5fc"
    static let light_blue_200 = "#81d4fa"
    static let light_blue_300 = "#4fc3f7"
    static let light_blue_400 = "#29b6f6"
    static let light_blue_500 = "#03a9f4"
    static let light_blue_600 = "#039be5"
    static let light_blue_700 = "#0288d1"
    static let light_blue_800 = "#0277bd"
    static let light_blue_900 = "#01579b"
    static let light_blue_a100 = "#80d8ff"
    static let light_blue_a200 = "#40c4ff"
    static let light_blue_a400 = "#00b0ff"
    static let light_blue_a700 = "#0091ea"

    static let light_green_50 = "#f1f8e9"
    static let light_green_100 = "#dcedc8"
    static let light_green_200 = "#c5e1a5"
    static let light_green_300 = "#aed581"
    static let light_green_400 = "#9ccc65"
    static let light_green_500 = "#8bc34a"
    static let light_green_600 = "#7cb342"
    static let light_green_700 = "#689f38"
    static let light_green_800 = "#558b2f"
    static let light_green_900 = "#33691e"
    static let light_green_a100 = "#ccff90"
    static let light_green_a200 = "#b2ff59"
    static let light_green_a400 = "#76ff03"
    static let light_green_a700 = "#64dd17"
    
    static let lime_50 = "#f9fbe7"
    static let lime_100 = "#f0f4c3"
    static let lime_200 = "#e6ee9c"
    static let lime_300 = "#dce775"
    static let lime_400 = "#d4e157"
    static let lime_500 = "#cddc39"
    static let lime_600 = "#c0ca33"
    static let lime_700 = "#afb42b"
    static let lime_800 = "#9e9d24"
    static let lime_900 = "#827717"
    static let lime_a100 = "#f4ff81"
    static let lime_a200 = "#eeff41"
    static let lime_a400 = "#c6ff00"
    static let lime_a700 = "#aeea00"

    static let orange_50 = "#fff3e0"
    static let orange_100 = "#ffe0b2"
    static let orange_200 = "#ffcc80"
    static let orange_300 = "#ffb74d"
    static let orange_400 = "#ffa726"
    static let orange_500 = "#ff9800"
    static let orange_600 = "#fb8c00"
    static let orange_700 = "#f57c00"
    static let orange_800 = "#ef6c00"
    static let orange_900 = "#e65100"
    static let orange_a100 = "#ffd180"
    static let orange_a200 = "#ffab40"
    static let orange_a400 = "#ff9100"
    static let orange_a700 = "#ff6d00"

    static let pink_50 = "#fce4ec"
    static let pink_100 = "#f8bbd0"
    static let pink_200 = "#f48fb1"
    static let pink_300 = "#f06292"
    static let pink_400 = "#ec407a"
    static let pink_500 = "#e91e63"
    static let pink_600 = "#d81b60"
    static let pink_700 = "#c2185b"
    static let pink_800 = "#ad1457"
    static let pink_900 = "#880e4f"
    static let pink_a100 = "#ff80ab"
    static let pink_a200 = "#ff4081"
    static let pink_a400 = "#f50057"
    static let pink_a700 = "#c51162"

    static let purple_50 = "#f3e5f5"
    static let purple_100 = "#e1bee7"
    static let purple_200 = "#ce93d8"
    static let purple_300 = "#ba68c8"
    static let purple_400 = "#ab47bc"
    static let purple_500 = "#9c27b0"
    static let purple_600 = "#8e24aa"
    static let purple_700 = "#7b1fa2"
    static let purple_800 = "#6a1b9a"
    static let purple_900 = "#4a148c"
    static let purple_a100 = "#ea80fc"
    static let purple_a200 = "#e040fb"
    static let purple_a400 = "#d500f9"
    static let purple_a700 = "#aa00ff"

    static let red_50 = "#fde0dc"
    static let red_100 = "#f9bdbb"
    static let red_200 = "#f69988"
    static let red_300 = "#f36c60"
    static let red_400 = "#e84e40"
    static let red_500 = "#e51c23"
    static let red_600 = "#dd191d"
    static let red_700 = "#d01716"
    static let red_800 = "#c41411"
    static let red_900 = "#b0120a"
    static let red_a100 = "#ff7997"
    static let red_a200 = "#ff5177"
    static let red_a400 = "#ff2d6f"
    static let red_a700 = "#e00032"

    static let teal_50 = "#e0f2f1"
    static let teal_100 = "#b2dfdb"
    static let teal_200 = "#80cbc4"
    static let teal_300 = "#4db6ac"
    static let teal_400 = "#26a69a"
    static let teal_500 = "#009688"
    static let teal_600 = "#00897b"
    static let teal_700 = "#00796b"
    static let teal_800 = "#00695c"
    static let teal_900 = "#004d40"
    static let teal_a100 = "#a7ffeb"
    static let teal_a200 = "#64ffda"
    static let teal_a400 = "#1de9b6"
    static let teal_a700 = "#00bfa5"

    static let white = "#ffffff"
    static let white_alpha_16 = "#10ffffff"
    static let white_alpha_32 = "#20ffffff"
    static let white_alpha_48 = "#30ffffff"
    static let white_alpha_64 = "#40ffffff"
    static let white_alpha_80 = "#50ffffff"
    static let white_alpha_96 = "#60ffffff"
    static let white_alpha_112 = "#70ffffff"
    static let white_alpha_128 = "#80ffffff"
    static let white_alpha_144 = "#90ffffff"
    static let white_alpha_160 = "#a0ffffff"
    static let white_alpha_176 = "#b0ffffff"
    static let white_alpha_192 = "#c0ffffff"
    static let white_alpha_208 = "#d0ffffff"
    static let white_alpha_224 = "#e0ffffff"
    static let white_alpha_240 = "#f0ffffff"
    
    static let yellow_50 = "#fffde7"
    static let yellow_100 = "#fff9c4"
    static let yellow_200 = "#fff59d"
    static let yellow_300 = "#fff176"
    static let yellow_400 = "#ffee58"
    static let yellow_500 = "#ffeb3b"
    static let yellow_600 = "#fdd835"
    static let yellow_700 = "#fbc02d"
    static let yellow_800 = "#f9a825"
    static let yellow_900 = "#f57f17"
    static let yellow_a100 = "#ffff8d"
    static let yellow_a200 = "#ffff00"
    static let yellow_a400 = "#ffea00"
    static let yellow_a700 = "#ffd600"
    
}

3、如何使用?调用方式如下:

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor(colorStr: MyColor.blue_100)
    }

4、最后,不同的屏幕显示的可能会有差异。按照苹果官方的文档的话,并不建议使用自定义颜色,而是推荐使用他们的系统颜色api。但是有一些颜色api要求在ios13以上,不兼容低版本,这就很尴尬。比如灰色是可用的,但灰色5是需要高版本:

self.view.backgroundColor = UIColor.systemGray

self.view.backgroundColor = UIColor.systemGray5
/// ERROR: 'systemGray5' is only available in iOS 13.0 or newer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值