[Swift通天遁地]五、高级扩展-(4)快速生成Invert、Mix、Tint、Shade颜色及调整饱和度阶...

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10235607.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目录:[Swift]通天遁地Swift

本文将演示第三方类库对颜色类的扩展。

首先确保在项目中已经安装了所需的第三方库。

点击【Podfile】,查看安装配置文件。

1 platform :ios, '12.0'
2 use_frameworks!
3 
4 target 'DemoApp' do
5     source 'https://github.com/CocoaPods/Specs.git'
6     pod 'DynamicColor'
7 end

根据配置文件中的相关配置,安装第三方库。

然后点击打开【DemoApp.xcworkspace】项目文件。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

现在开始编写代码,获得某个颜色的亮色、暗色、灰阶、反色、混合色等。

  1 import UIKit
  2 //在当前的类文件中,引入已经安装的第三方类库
  3 import DynamicColor
  4 
  5 //添加集合视图数据源协议UICollectionViewDataSource和代理协议UICollectionViewDelegate
  6 class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
  7     
  8     //初始化一个字符串常量,作为集合视图单元格的复用标识。
  9     private let ColorCellIdentifier = "ColorCell"
 10     
 11     //继续添加一个集合视图变量,作为当前类的属性。
 12     //将使用此集合视图,展示颜色的各种变化
 13     var colorCollectionView: UICollectionView!
 14     
 15     //初始化一个颜色数组,作为集合视图的数据源
 16     private lazy var colors: [(String, UIColor)] = {
 17         let mainColor = UIColor(hexString: "#c0392b")
 18         
 19         //返回一个颜色数组
 20         return [
 21             //原色
 22             ("Original", mainColor),
 23             //亮色
 24             ("Lighter", mainColor.lighter()),
 25             //暗色
 26             ("Darkered", mainColor.darkened()),
 27             //饱和度增强
 28             ("Saturated", mainColor.saturated()),
 29             //饱和度减弱
 30             ("Desaturated", mainColor.desaturated()),
 31             //灰调
 32             ("Grayscaled", mainColor.grayscaled()),
 33             //调整色相
 34             ("Adjusted", mainColor.adjustedHue(amount: 45)),
 35             //互补色
 36             ("Complemented", mainColor.complemented()),
 37             //反色
 38             ("Inverted", mainColor.inverted()),
 39             //蓝色
 40             ("Mix Blue", mainColor.mixed(withColor: .blue)),
 41             //绿色
 42             ("Mix Green", mainColor.mixed(withColor: .green)),
 43             //黄色
 44             ("Mix Yellow", mainColor.mixed(withColor: .yellow)),
 45             //混合色
 46             ("Tinted", mainColor.tinted()),
 47             //阴影色
 48             ("Shaded", mainColor.shaded())
 49         ]
 50     }()
 51     
 52     //初始化一个数组,用来存储渐变颜色
 53     private lazy var gradients: [(String, UIColor)] = {
 54         //返回一个由红黄蓝三色组成的渐变颜色
 55         return [UIColor.red, 
 56                 UIColor.yellow ,
 57                 UIColor.blue].gradient.colorPalette(amount: 15).map { ($0.toHexString(), $0) }
 58     }()
 59     
 60     override func viewDidLoad()
 61     {
 62         super.viewDidLoad()
 63         
 64         //初始化集合视图的流动布局对象
 65         let layout = UICollectionViewFlowLayout()
 66         //设置布局对象的底部区域的参数尺寸
 67         layout.footerReferenceSize = CGSize(width: 320, height: 80)
 68         
 69         //初始化一个集合视图对象,并设置该对象的显示区域和布局属性
 70         colorCollectionView = UICollectionView(frame: CGRect(x: 0, y: 20, width: 320, height: 548), collectionViewLayout: layout)
 71         //设置集合视图的数据源,为当前的视图控制器对象
 72         colorCollectionView.dataSource = self
 73         //给集合视图进行注册,并设置单元格的复用标识
 74         colorCollectionView.register(UICollectionViewCell.classForCoder(), forCellWithReuseIdentifier: ColorCellIdentifier)
 75         
 76         //将集合视图添加到根视图
 77         self.view.addSubview(colorCollectionView)
 78         //并重新加载集合视图的数据
 79         colorCollectionView.reloadData()
 80     }
 81     
 82     //添加一个方法,用来设置集合视图的段落为2
 83     func numberOfSections(in collectionView: UICollectionView) -> Int
 84     {
 85         //第一个段落用来显示各种扩展色
 86         //第一个段落用来显示渐变色
 87         return 2
 88     }
 89 
 90     //添加一个方法,根据段落的不同,返回不同的数据源
 91     func collection(inSection section: Int) -> [(String, UIColor)]
 92     {
 93         return section == 0 ? colors : gradients
 94     }
 95     
 96     //添加一个方法,设置段落中单元格的数量
 97     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
 98     {
 99         //根据段落的不同,返回不同的单元格数量
100         return collection(inSection: section).count
101     }
102     
103     //添加一个方法,用来初始化或复用集合视图的单元格
104     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
105     {
106         //根据复用标识,从集合视图中获取可以复用的单元格
107         let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ColorCellIdentifier, for: indexPath)
108         //根据指定的段落和行数获得对应的标题和颜色
109         let (title, color) = collection(inSection: indexPath.section)[indexPath.row]
110         
111         //获得在单元格中,表示值为1的单元格对象
112         var label = cell.viewWithTag(1) as? UILabel
113         //如果没有该标签对象,
114         if(label == nil)
115         {
116             //则初始化一个新的标签对象,并设置其显示区域
117             label = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
118             //设置标签对象的字体属性
119             label?.font = UIFont(name: "Arial", size: 10)
120             //设置标签对象的标识值为1
121             label?.tag = 1
122             //设置标签对象的文字对齐方式为居中对齐,
123             label?.textAlignment = .center
124             //并将标签对象添加到单元格中。
125             cell.addSubview(label!)
126         }
127         
128          //设置标签对象的文字内容
129         label?.text = title
130         //设置单元格的背景颜色,为数据源中的颜色
131         cell.backgroundColor = color
132         
133         //返回设置好的单元格
134         return cell
135     }
136 }

 模拟器的上方显示了由原始色扩展出的各种颜色,而在下方的区域则显示了一组渐变颜色。

转载于:https://www.cnblogs.com/strengthen/p/10235607.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-非负矩阵分解-NMF

非负矩阵分解 非负矩阵分解是矩阵中所有元素均为非负数约束条件下的矩阵分解,其基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和矩阵H的乘积近似等于矩阵V中的值。 矩阵:被称为基础…

OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大

来源:AI科技评论作者:琰琰、青暮比GPT-3更强大!昨日,微软与OpenAI共同推出了一款AI编程工具GitHub Copilot,这款工具基于GitHub及其他网站的源代码,可根据上文提示为程序员自动编写下文代码!Git…

Hanlp之理解用户自定义词典(java版本)

首先说明,由于本人水平有限,文章纰漏以及不妥之处还请指出,不胜感激; 理解hanlp中用户自定义词典(java) 什么是hanlp用户自定义字典?为什么要有用户自定义词典? 在Hanlp分词中&…

java自用代码(包括:新建单线程、创建文件夹及文件、map转为json并将json写入txt、文件剪切或改名)...

// 单向光闸写入文件线程new Thread(new Runnable() {// 将map转为jsonJSONObject obdjson new JSONObject(data);Overridepublic void run() {try {//创建文件夹及文件String fileName UUID.randomUUID().toString().replaceAll("-", "");String wfileN…

python-聚类图像分割

K-Means聚类图像分割 图像分割: 利用图像的灰度,颜色,纹理,形状等特征,把图像分成若干个互不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同区域之间存在明显的差异性。然后&#xff0c…

科学家揭秘大脑靠“旋转”区分过去和现在,还给了个AI架构设计新思路 | Nature子刊...

来源:量子位 过去和现在的边界,到底在哪里?人类,又是如何在时间混沌中区分出过往与当下的?注意,这不是一个哲学问题。(手动狗头)而是科学家们的最新研究。两个普林斯顿的神经学家&am…

Hanlp中自定义词典的配置、引用以及问题解决

文章目录如何阅读本文?Hanlp用户自定义词典引用简介操作步骤环境创建编辑词典文件将用户自定义词典路径加入配置文件删除缓存文件如何阅读本文? 首先我们对Hanlp用户词典进行简介,推荐首先阅读链接文章,它是本文的第一来源&#…

有监督学习

有监督学习 利用一组带有标签的数据,学习从输入到输出的映射,然后将这种映射关系应用到未知数据上,达到分类或回归的目的。 分类:当输出为离散的,学习任务为分类任务。回归:当输出为连续的,学习…

深度学习助力网络科学:基于深度学习的社区发现最新综述

来源:AMiner科技论文题目:A Comprehensive Survey on Community Detection with Deep Learning论文网址:https://arxiv.org/pdf/2105.12584.pdf近日,澳大利亚麦考瑞大学计算机学院人工智能与数据科学实验室联合中科院数学与系统科…

Neo4j 图创建1 以BiliBili粉丝UP主之间的关系为例

基本关系图如下,不给出细节 其中所有粉丝名为杜撰,如有雷同纯属巧合 UP主对应关系为方便建库进行了主观处理,不代表真实情况 无商业用途,学习使用

python-k近邻分类器-KNN

K近邻分类器,通过计算待分类数据点,与已有数据集点的所有数据点的距离。取距离最小的前K个点,根据“少数服从多数”的原则,将这个数据点划分为出现次数最多的那个类别。sklean库s,可以使用sklean.neighbors.KNeighborsClassiffier…

CentOS7开放端口号

查看所有开放的端口号 firewall-cmd --zonepublic --list-ports 或者 firewall-cmd --permanent --list-ports(--permanent表示永久生效) 查询指定端口号是否开发 firewall-cmd --permanent --query-port8080/tcp 删除一个已经开放的端口号 firewall-cm…

Hinton,Lecun和Bengio三巨头联手再发万字长文:深度学习的昨天、今天和明天

来源:ACM编辑:Priscilla Emil2018年,ACM(国际计算机学会)决定将计算机领域的最高奖项图灵奖颁给Yoshua Bengio、Yann LeCun 和 Geoffrey Hinton,以表彰他们在计算机深度学习领域的贡献。这也是图灵奖第三次…

python- 决策树分类器

树形结构分类器,通过顺序询问分类点的属性决定分类点的最终类别。通常根据特征的信息增益或其他指标。构建棵决策树,在分类时,只需要按照决策树中的结点一次顺序判断,即可得到样本所属的类别。 sklearn库:可以使用s…

LR为什么用极大似然估计,损失函数为什么是log损失函数(交叉熵)

首先,逻辑回归是一个概率模型,不管x取什么值,最后模型的输出也是固定在(0,1)之间,这样就可以代表x取某个值时y是1的概率 这里边的参数就是θ,我们估计参数的时候常用的就是极大似然估计&#xf…

LSTM之父撰文,纪念这位图灵奖遗珠、“AI理论之父”

原文:1931: Kurt Gdel, founder of theoretical computer science, shows limits of math, logic, computing, and artificial intelligence作者:Jrgen Schmidhuber (知名 AI 学者,LSTM 之父)译者:刘媛媛摘…

Maven简述以及配置使用

目前的技术存在的问题(引入Maven的重要性) 一个项目就是一个工程; 如果项目非常庞大,就不再适合使用package来划分模块;最好是每一个模块对应一个工程,利于分工协作; 借助于Maven可以将一个项目…

python-朴素贝叶斯分类器

朴素贝叶斯分类器 朴素贝叶斯分类器是一个以贝叶斯定理为基础的多分类的分类器。对于给定数据,首先基于特征的条件独立性假设,学习输入输出的联合概率分布, 然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率…

依图科技终止上市审核:冲击科创板「AI第一股」失败

来源:机器之心AI 创业公司在国内市场 IPO 真就这么困难?7 月 2 日晚上交所消息,决定终止对依图科技首次公开发行存托凭证并在科创板上市的审核。依图的上市申请是于 2020 年 11 月 4 日被上交所依法受理的,其股票预计采用 CDR&…