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 统一颜色管理和适配深色模式
实现分析 像系统那样,给项目中常用的颜色取名字,这里使用扩展语法实现,好处是可以像访问系统颜色那样访问自定义的颜色。 添加依赖 为了能使用16进制的颜色值,这里通过依赖DynamicColor框架来实现 #颜色工具类 #https://githu…...
Linux目录结构及基础查看命令和命令模式
Linux目录结构及基础查看命令和命令模式 1.树形目录结构根目录 所有分区、目录、文件等的位置起点整个树形目录结构中,使用独立的一个“/”表示 常见的子目录 /root 管理员的宿主(家)目录 /home/xxx 普通用户的家目录 /bin 命令文件目录,存放所…...

UDP和TCP协议段格式分析
目录 UDP协议 特点 UDP协议的缓冲区 UDP协议段格式 TCP协议 特点 如何理解TCP是传输控制协议? TCP协议段格式 四位首部长度 16位窗口大小 32位序号 32位确认序号 TCP/IP四层模型: UDP协议 UDP(User Datagram Protocol ÿ…...
Go语言基础--条件判断(if语句)
if语句它允许程序根据一个或多个条件(通常是布尔表达式)的真假来决定执行哪一段代码。如果条件为真(true),则执行if语句块内的代码;如果条件为假(false),则跳过该代码块&…...
白骑士的C#教学实战项目篇 4.2 图形用户界面(GUI)应用
系列目录 上一篇:白骑士的C#教学实战项目篇 4.1 控制台应用程序 在这一部分,我们将从简单的控制台应用程序过渡到图形用户界面(GUI)应用程序。GUI 应用程序更加直观和用户友好,是现代软件开发的核心内容。我们将介绍如…...

【Java学习】反射和枚举详解
所属专栏:Java学习 🍁1. 反射 在程序运行时,可以动态地创建对象、调用方法、访问和修改字段,以及获取类的各种属性信息(如成员变量、方法、构造函数等),这种机制就称为反射 反射相关的类 类名用…...

leetcode-461. 汉明距离
题目描述 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入:x 1, y 4 输出:2 解释: 1 (0 0 0 1) 4 (0 1 0 0) …...
rpmbuild 将二进制文件 strip,文件 md5 发生改变
rpmbuild 将二进制文件 strip,文件 md5 发生改变 上一篇中提到 strip 相关的操作,会去掉文件中的调试信息【strip 、objdump、objcopy 差异与区别】 在编译或打包环境中,莫名其妙的文件 大小 md5 都发生了改变,怀疑跟 rpmbuild 打…...
selenium爬取搜狗网站新闻的小Demo
使用之前请确保自己chrome浏览的版本与chromedriver的版本一致, Mac确保chromedriver已经放到python的bin目录中 Windows确保chromedriver已经放到python.exe同目录中 当前selenium Version: 3.141.0,4版本后面改为:find_element(By.CLASS_NA…...
R 语言学习教程,从入门到精通,R CSV 文件使用(17)
1、R CSV 文件 R 作为统计学专业工具,如果只能人工的导入和导出数据将使其功能变得没有意义,所以 R 支持批量的从主流的表格存储格式文件(例如 CSV、Excel、XML 等)中获取数据。 1.1、CSV 表格交互 CSV(Comma-Separ…...

【LLM之Base Model】Weaver论文阅读笔记
研究背景 当前的大型语言模型(LLM)如GPT-4等,尽管在普通文本生成中表现出色,但在创造性写作如小说、社交媒体内容等方面,往往不能很好地模仿人类的写作风格。这些模型在训练和对齐阶段,往往使用的是大规模…...

泰坦尼克号 - 从灾难中学习机器学习/Titanic - Machine Learning from Disaster(kaggle竞赛)第一集(了解赛题)
此次目的: hello大家好,俺是没事爱瞎捣鼓又分享欲爆棚的叶同学!!!准备出几期博客来记录我学习kaggle数据科学入门竞赛的过程,顺便也将其中所学习到的知识分享出来。这是第一集(了解赛题&#x…...

使用C++调用PyTorch模型的弯弯绕绕,推荐LibTorch加载,C++处理
需求:使用C调用Pytorch模型,对处理后的图像进行预测。 第一种,使用C调用Python代码处理,使用pybind11源代码再末尾 缺点,导入Python包非常麻烦,执行的C程序找不到cv2 torch包等等 本人解决了cv2 numpy等包&…...

实现异形(拱形)轮播图
项目需要实现如上图所示的轮播图。 实现思路: 1.项目引入使用普通轮播图。 2.根据轮播图个数,动态给可视范围的第一个轮播图和最后一个轮播图添加样式。 代码实现: 经调研,使用slick轮播图(官网地址 https://kenwheel…...
【软件测试】2024年职业院校技能大赛高职组“软件测试”赛项样题
目录 任务一:功能测试(45 分) 任务二:自动化测试(15 分) 任务三:性能测试(15 分) 任务四:单元测试(10 分) 任务五:接…...
python数组和队列
一、数组 如果一个列表只包含数值,那么使用array.array会更加高效,数组不仅支持所有可变序列操作(.pop、.insert、.extent等),而且还支持快速加载项和保存项的方法(.fromfile、.tofile等) 创建…...
Vision Transformer(ViT)一种将Transformer架构应用于计算机视觉领域的模型
Vision Transformer(ViT)是一种将Transformer架构应用于计算机视觉领域的模型,它通过自注意力机制处理图像数据,与传统的卷积神经网络(CNN)相比,ViT能够更好地捕捉全局依赖关系。以下是对ViT的详…...

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

使用el-menu跳转时偶尔会出现路由已经变了,但是页面却显示空白的情况
刚开始我以为是我数据加载的问题,后来又看有人说是template里不能包多个div,但我去看我出错的组件,并没有出现两个div。 后来我就把每个都给改了,即使是elemen-ui的标签也全部改在一个div里,就发现没问题了。 我改的…...
C语言家教记录(七)
C语言家教记录(七) 导语字符串字面量变量读写字符串操作函数惯用法数组 结构联合枚举总结与复习 导语 本次授课的内容如下:字符串,结构体、联合体、枚举 辅助教材为 《C语言程序设计现代方法(第2版)》 字…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...