IOS 10 统一颜色管理和适配深色模式

实现分析

像系统那样,给项目中常用的颜色取名字,这里使用扩展语法实现,好处是可以像访问系统颜色那样访问自定义的颜色。

添加依赖

为了能使用16进制的颜色值,这里通过依赖DynamicColor框架来实现

#颜色工具类
#https://github.com/yannickl/DynamicColor
pod "DynamicColor"

还不了解如何使用 CocoaPods 管理依赖的,建议先看前面的文章:IOS 01 CocoaPods 安装与使用

定义颜色

通过扩展UIColor类来实现

import DynamicColor

//iOS中也提供了命名颜色,例如:.systemBackground,但无法更改他的颜色,Android中就可以根据浅色,深色修改命名的颜色,更方便
extension UIColor {
    /// 主色调
    static var primaryColor : UIColor {return DynamicColor(hex: 0xd6271c)}

    /// 暗一点 主色调
    static var primary30 : UIColor {return DynamicColor(hex: 0xa92e29)}

//    #pragma mark - 黑色到白色
    //颜色命名也是很大的问题,关于颜色命名方式讨论:https://www.zhihu.com/question/301985702
    //以下命名后面的数字,没有实际意思
    //后面两位是透明度
    static var blackTransparent88 : UIColor {return DynamicColor(hex: 0x00000088,useAlpha: true)}
    static var buttonTransparent88 : UIColor {return DynamicColor(hex: 0x00000088,useAlpha: true)}
    static var transparent88 : UIColor {return DynamicColor(hex: 0x88888888,useAlpha: true)}
    static var black11 : UIColor {return DynamicColor(hex: 0xbbbbbb)}
    static var black15 : UIColor {return DynamicColor(hex: 0x111111)}
    static var black17 : UIColor {return DynamicColor(hex: 0x151515)}
    static var black20 : UIColor {return DynamicColor(hex: 0x161616)}
    static var black25 : UIColor {return DynamicColor(hex: 0x191919)}
    static var black30 : UIColor {return DynamicColor(hex: 0x111111)}
    static var black31 : UIColor {return DynamicColor(hex: 0x1b1b1b)}
    static var black311 : UIColor {return DynamicColor(hex: 0x1c1c1c)}
    static var black312 : UIColor {return DynamicColor(hex: 0x1e1e1e)}
    static var black32 : UIColor {return DynamicColor(hex: 0x202020)}
    static var black33 : UIColor {return DynamicColor(hex: 0x242424)}
    static var black322 : UIColor {return DynamicColor(hex: 0x212121)}
    static var black40 : UIColor {return DynamicColor(hex: 0x353535)}
    static var black42 : UIColor {return DynamicColor(hex: 0x353535)}
    static var black43 : UIColor {return DynamicColor(hex: 0x313131)}
    static var black45 : UIColor {return DynamicColor(hex: 0x3c3c3c)}
    static var black66 : UIColor {return DynamicColor(hex: 0x666666)}
    static var black70 : UIColor {return DynamicColor(hex: 0x707070)}
    static var black80 : UIColor {return DynamicColor(hex: 0x888888)}
    static var black90 : UIColor {return DynamicColor(hex: 0xaaaaaa)}
    static var black130 : UIColor {return DynamicColor(hex: 0xc8c8c8)}
    static var black140 : UIColor {return DynamicColor(hex: 0xcfcfcf)}
    static var black150 : UIColor {return DynamicColor(hex: 0xe5e5e5)}
    static var black160 : UIColor {return DynamicColor(hex: 0xd5d5d5)}
    static var black165 : UIColor {return DynamicColor(hex: 0xd1d1d1)}
    static var black170 : UIColor {return DynamicColor(hex: 0xe1e1e1)}
    static var black180 : UIColor {return DynamicColor(hex: 0xededed)}
    static var black183 : UIColor {return DynamicColor(hex: 0xf5f5f5)}
    static var black190 : UIColor {return DynamicColor(hex: 0xf6f6f6)}

    /// 链接颜色
    static var link : UIColor {return DynamicColor(hex: 0x2440b3)}

    /// 主色调,暗一点按钮颜色
    static var primaryButton : UIColor {return DynamicColor(hex: 0x596c94)}

    /// vip金色
    static var vipBorder : UIColor {return DynamicColor(hex: 0xc4b2ad)}

    static var divider2 : UIColor {return DynamicColor(hex: 0x484848)}

    /// 亮灰色,例如:设置item右侧图标,右侧更多文本颜色
    static var lightGray : UIColor {return DynamicColor(hex: 0x888888)}

    /// 错误警告颜色,主要是做敏感操作,例如:删除联系人时,确认按钮颜色
    static var warning : UIColor {return DynamicColor(hex: 0xf85353)}

    /// 优惠券文本颜色
    static var textPrice : UIColor {return DynamicColor(hex: 0xf42102)}

    /// 绿色,表示正确颜色
    static var pass : UIColor {return DynamicColor(hex: 0x0ab855)}
}

定动态颜色

为了能适配深色模式,创建动态颜色,通过initColor方法,根据当前手机的主题颜色返回对应模式适配的颜色,如:当前手机为深色模式,则返回定义的深色模式的颜色值。

extension UIColor{
    /// 主色调
    static var colorPrimary: UIColor {
        return .initColor(normal: .primaryColor, dark: .primary30)
    }

    /// 背景色
    static var colorBackground: UIColor {
        return .initColor(normal: .black183, dark: .black17)
    }


    static var colorBackgroundLight: UIColor {
        return .initColor(normal: .white, dark: .black17)
    }

    /// 背景色上面内容颜色
    static var colorOnBackground: UIColor {
        return .initColor(normal: .black20, dark: .black140)
    }

    /// 背景色上面内容背景颜色,例如card背景,会话界面item背景,其他的例如LinearLayout这样的控件,需要手动指定使用该属性
    static var colorSurface: UIColor {
        return .initColor(normal: .white, dark: .black33)
    }

    /// colorSurface点击颜色
    static var colorSurfaceClick: UIColor {
        return .initColor(normal: .black130, dark: .black322)
    }

    /// colorSurface上面的主内容颜色,例如:card上面主要内容颜色,会话界面item上面标题颜色
    static var colorOnSurface: UIColor {
        return .initColor(normal: .black25, dark: .black165)
    }

    static var colorDivider: UIColor {
        return .initColor(normal: .black180, dark: .black33)
    }

    static var colorDivider2: UIColor {
        return .initColor(normal: .black170, dark: .black30)
    }

    static var colorSlideBackground: UIColor {
        return .initColor(normal: .black170, dark: .black17)
    }

    static var colorLightWhite: UIColor {
        return .initColor(normal: .white, dark: .black180)
    }

    static var secondButtonLight: UIColor {
        return .initColor(normal: .white, dark: .black45)
    }

    /// 文本消息左侧背景
    static var leftChatBackground: UIColor {
        return .initColor(normal: .black170, dark: .black17)
    }

    /// 文本消息右侧背景
    static var rightChatBackground: UIColor {
        return .initColor(normal: .colorPrimary, dark: .colorPrimary)
    }

    // MARK: - 颜色定义快捷方法

    /// 定义浅色,深色颜色快捷方法
    /// - Returns: <#description#>
    static func initColor(normal:UIColor,dark:UIColor) -> UIColor {
        if #available(iOS 13.0, *) {
            return UIColor { (traitCollection) -> UIColor in
                return traitCollection.userInterfaceStyle == .dark ? dark : normal
            }
        }else{
            //用浅色
            return normal
        }
    }
}

使用

设置所有界面背景颜色,如果某个界面不一样,但具体界面单独设置:

//默认颜色,如果某些界面不一样,在单独设置
view.backgroundColor = .colorBackground

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sziitjin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值