当前位置: 首页 > news >正文

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 inreturn traitCollection.userInterfaceStyle == .dark ? dark : normal}}else{//用浅色return normal}}
}

使用

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

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

相关文章:

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

实现分析 像系统那样&#xff0c;给项目中常用的颜色取名字&#xff0c;这里使用扩展语法实现&#xff0c;好处是可以像访问系统颜色那样访问自定义的颜色。 添加依赖 为了能使用16进制的颜色值&#xff0c;这里通过依赖DynamicColor框架来实现 #颜色工具类 #https://githu…...

Linux目录结构及基础查看命令和命令模式

Linux目录结构及基础查看命令和命令模式 1.树形目录结构根目录 所有分区、目录、文件等的位置起点整个树形目录结构中&#xff0c;使用独立的一个“/”表示 常见的子目录 /root 管理员的宿主(家)目录 /home/xxx 普通用户的家目录 /bin 命令文件目录&#xff0c;存放所…...

UDP和TCP协议段格式分析

目录 UDP协议 特点 UDP协议的缓冲区 UDP协议段格式 TCP协议 特点 如何理解TCP是传输控制协议&#xff1f; TCP协议段格式 四位首部长度 16位窗口大小 32位序号 32位确认序号 TCP/IP四层模型&#xff1a; UDP协议 UDP&#xff08;User Datagram Protocol &#xff…...

Go语言基础--条件判断(if语句)

if语句它允许程序根据一个或多个条件&#xff08;通常是布尔表达式&#xff09;的真假来决定执行哪一段代码。如果条件为真&#xff08;true&#xff09;&#xff0c;则执行if语句块内的代码&#xff1b;如果条件为假&#xff08;false&#xff09;&#xff0c;则跳过该代码块&…...

白骑士的C#教学实战项目篇 4.2 图形用户界面(GUI)应用

系列目录 上一篇&#xff1a;白骑士的C#教学实战项目篇 4.1 控制台应用程序 在这一部分&#xff0c;我们将从简单的控制台应用程序过渡到图形用户界面&#xff08;GUI&#xff09;应用程序。GUI 应用程序更加直观和用户友好&#xff0c;是现代软件开发的核心内容。我们将介绍如…...

【Java学习】反射和枚举详解

所属专栏&#xff1a;Java学习 &#x1f341;1. 反射 在程序运行时&#xff0c;可以动态地创建对象、调用方法、访问和修改字段&#xff0c;以及获取类的各种属性信息&#xff08;如成员变量、方法、构造函数等&#xff09;&#xff0c;这种机制就称为反射 反射相关的类 类名用…...

leetcode-461. 汉明距离

题目描述 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 示例 1&#xff1a; 输入&#xff1a;x 1, y 4 输出&#xff1a;2 解释&#xff1a; 1 (0 0 0 1) 4 (0 1 0 0) …...

rpmbuild 将二进制文件 strip,文件 md5 发生改变

rpmbuild 将二进制文件 strip&#xff0c;文件 md5 发生改变 上一篇中提到 strip 相关的操作&#xff0c;会去掉文件中的调试信息【strip 、objdump、objcopy 差异与区别】 在编译或打包环境中&#xff0c;莫名其妙的文件 大小 md5 都发生了改变&#xff0c;怀疑跟 rpmbuild 打…...

selenium爬取搜狗网站新闻的小Demo

使用之前请确保自己chrome浏览的版本与chromedriver的版本一致&#xff0c; Mac确保chromedriver已经放到python的bin目录中 Windows确保chromedriver已经放到python.exe同目录中 当前selenium Version: 3.141.0&#xff0c;4版本后面改为&#xff1a;find_element(By.CLASS_NA…...

R 语言学习教程,从入门到精通,R CSV 文件使用(17)

1、R CSV 文件 R 作为统计学专业工具&#xff0c;如果只能人工的导入和导出数据将使其功能变得没有意义&#xff0c;所以 R 支持批量的从主流的表格存储格式文件&#xff08;例如 CSV、Excel、XML 等&#xff09;中获取数据。 1.1、CSV 表格交互 CSV&#xff08;Comma-Separ…...

【LLM之Base Model】Weaver论文阅读笔记

研究背景 当前的大型语言模型&#xff08;LLM&#xff09;如GPT-4等&#xff0c;尽管在普通文本生成中表现出色&#xff0c;但在创造性写作如小说、社交媒体内容等方面&#xff0c;往往不能很好地模仿人类的写作风格。这些模型在训练和对齐阶段&#xff0c;往往使用的是大规模…...

泰坦尼克号 - 从灾难中学习机器学习/Titanic - Machine Learning from Disaster(kaggle竞赛)第一集(了解赛题)

此次目的&#xff1a; hello大家好&#xff0c;俺是没事爱瞎捣鼓又分享欲爆棚的叶同学&#xff01;&#xff01;&#xff01;准备出几期博客来记录我学习kaggle数据科学入门竞赛的过程&#xff0c;顺便也将其中所学习到的知识分享出来。这是第一集&#xff08;了解赛题&#x…...

使用C++调用PyTorch模型的弯弯绕绕,推荐LibTorch加载,C++处理

需求&#xff1a;使用C调用Pytorch模型&#xff0c;对处理后的图像进行预测。 第一种&#xff0c;使用C调用Python代码处理&#xff0c;使用pybind11源代码再末尾 缺点&#xff0c;导入Python包非常麻烦&#xff0c;执行的C程序找不到cv2 torch包等等 本人解决了cv2 numpy等包&…...

实现异形(拱形)轮播图

项目需要实现如上图所示的轮播图。 实现思路&#xff1a; 1.项目引入使用普通轮播图。 2.根据轮播图个数&#xff0c;动态给可视范围的第一个轮播图和最后一个轮播图添加样式。 代码实现&#xff1a; 经调研&#xff0c;使用slick轮播图&#xff08;官网地址 https://kenwheel…...

【软件测试】2024年职业院校技能大赛高职组“软件测试”赛项样题

目录 任务一&#xff1a;功能测试&#xff08;45 分&#xff09; 任务二&#xff1a;自动化测试&#xff08;15 分&#xff09; 任务三&#xff1a;性能测试&#xff08;15 分&#xff09; 任务四&#xff1a;单元测试&#xff08;10 分&#xff09; 任务五&#xff1a;接…...

python数组和队列

一、数组 如果一个列表只包含数值&#xff0c;那么使用array.array会更加高效&#xff0c;数组不仅支持所有可变序列操作&#xff08;.pop、.insert、.extent等&#xff09;&#xff0c;而且还支持快速加载项和保存项的方法&#xff08;.fromfile、.tofile等&#xff09; 创建…...

Vision Transformer(ViT)一种将Transformer架构应用于计算机视觉领域的模型

Vision Transformer&#xff08;ViT&#xff09;是一种将Transformer架构应用于计算机视觉领域的模型&#xff0c;它通过自注意力机制处理图像数据&#xff0c;与传统的卷积神经网络&#xff08;CNN&#xff09;相比&#xff0c;ViT能够更好地捕捉全局依赖关系。以下是对ViT的详…...

得到任务式 大模型应用开发学习方案

根据您提供的文档内容以及您制定的大模型应用开发学习方案&#xff0c;我们可以进一步细化任务式学习的计划方案。以下是具体的任务式学习方案&#xff1a; 任务设计 初级任务 大模型概述&#xff1a;阅读相关资料&#xff0c;总结大模型的概念、发展历程和应用领域。深度学…...

使用el-menu跳转时偶尔会出现路由已经变了,但是页面却显示空白的情况

刚开始我以为是我数据加载的问题&#xff0c;后来又看有人说是template里不能包多个div&#xff0c;但我去看我出错的组件&#xff0c;并没有出现两个div。 后来我就把每个都给改了&#xff0c;即使是elemen-ui的标签也全部改在一个div里&#xff0c;就发现没问题了。 我改的…...

C语言家教记录(七)

C语言家教记录&#xff08;七&#xff09; 导语字符串字面量变量读写字符串操作函数惯用法数组 结构联合枚举总结与复习 导语 本次授课的内容如下&#xff1a;字符串&#xff0c;结构体、联合体、枚举 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 字…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...