以下为《精通iOS开发》的一些学习笔记。
对于有些可视化元素来说,仅仅使用UIKit框架内置的组件式无法完全实现的。iOS内置的Core Graphics框架,用于进行一系列的各类绘图工作。
16.1 Quartz 2D基础概念
Core Graphics 中关键部分是一个名为Quartz 2D的API集合,它包含了各种函数、数据类型以及对象,能让你在内存中直接绘制视图和图像。
绘画模式:Quartz 2D将正在进行绘制的视图或图像视作一个虚拟的画布。
硬件加速,尽管许多Quartz 2D函数会在绘画时利用硬件加速,但无法保证在Quartz 2D中执行的操作都会得到加速。
16.2 Quartz 2D绘图方法
使用Quartz 2D绘制图形时,通常需要向图形所在的视图中添加绘画代码。比如一个UIView的子类,向该类的drawRect:方法中添加对Quartz函数的调用。
16.2.1 Quartz2D图形环境
与Core Graphics 中其他部分一样,Quartz的绘制是在图形环境中进行的,通常简称它为环境(context)。
每个视图都有相关的环境,需要先获取当前环境,通过它可以调用各类Quartz绘图函数,由环境负责将图形绘制在视图上。可以认为环境是一种画布。可以用以下语句来获取它。
CGContextRef context = UIGraphicsGetCurrentContext();
Stroke 这个单词有意思,在iOS里指的是笔刷,用于绘制直线以及形状的轮廓。
可以认为,环境是通过一支看不见的画笔来绘制线条的,随着绘制命令的执行,画笔的移动会形成一段路径。当调用CGContextMoveToPoint()时,会将虚拟画笔移动到指定的位置,事实上这样做并不会执行任何绘图操作。无论接下来执行何种操作,它都将画笔所移动到的点为参照物执行自己的工作。比如你将画笔移动到(10,10)的点,然后画一条线到(20, 20)这时(20,20)会成为画笔的新位置。
在Core Graphics 中绘图时,你并没有绘制任何实际可见的内容,创建的对象不包含颜色或其他可见的内容,就像是用隐形墨水在书写,在执行某些使其可见的操作之前,路径是看不到的。因此下一步是调用CGContexStrokePath()函数来告诉Quartz 来绘制路径。
16.2.2 坐标系统
左上角是原点,区别于OpenGL或OS X版本的Quartz
理解几个CGPoint、CGSize、CGRect概念,点、尺寸、矩形。
16.2.3 指定颜色
不能在Core Graphics函数调用中直接使用UIColor对象,因为UIColor仅仅是CGColor的一个容器。可以使用以下代码来获取一个CGColor的引用:
CGContextSetStrokeColorWithColor(context,[UIColor redColor].CGColor);
1、iOS设备上的色彩理论
概念:色彩模型、色彩空间
CGFloat 限定变量,值只能在0.0-1.0之间选取。
RGB色彩模型 、
RYB色彩模型、
RGBA色彩模型
2、其他色彩模型
色相、饱和度、色明度 (HSV)
……
3、颜色便利方法
UIColor提供了许多便利方法,可以放回被初始化为特定颜色的UIColor对象,在上一个代码示例中,我们使用redColor方法将颜色初始化为红色。这种便利方法创建的UIColor实例对象恰好大部分采用的是RGBA色彩模型。
16.2.4 在环境中绘制图像
通过Quartz可以在环境中直接绘制图像,这是OC类UIImage的另一种用法,可以使用它作为Core Graphics中数据结构的代替方式。
16.2.5 绘制形状:多边形、直线和曲线
只要一个Quartz函数,包治百病,就是这么犀利!