********************************** 简介 ***************************************
Quartz2D是⼀个二维绘图引擎,同时支持iOS和Mac系统。
Quartz2D能完成的工作:
绘制图形 : 线条\三角形\矩形\圆\弧等
绘制文字
绘制\生成图片(图像)
读取\生成PDF
截图\裁剪图片
自定义UI控件:事实上iOS中⼤部分控件的内容都是通过Quartz2D画出来的。
****************************** 常用属性及函数 ***********************************
CGContextRef GraphicsContext
作用:
保存绘图信息,绘图状态
决定绘制的输出目标(比如输出到PDF,显示器的窗口,打印机)
如何利用Quartz2D绘图到view上?
1. 首先要有Graphics Context,它保存绘图信息,并且决定将图绘制到什么地方。
2. Graphics Context要与view相关联,才能将内容绘制到view上。
执行步骤
1. 建立一个继承UIView的类
2. 实现 -(void) drawRect:(CGRect)rect 方法(此方法才能得到与view相关的GraphicsContext):
1)取得跟当前view相关联的GraphicsContext
2)绘制图形
3)利用GraphicsCotext将绘制内容渲染显示到view上
Quartz2D的API来自于 Core Graphics 框架,是纯C语言的,因此Quartz2D的API基本都以CG为前缀。
view内部有个layer属性,view之所以能显示东西,是因为layer,所以drawRect:取得的其实是Layer Graphics Context。
******************************* 实现简单绘图 *********************************
画直线
// drawRect:方法在自定义view第一次显示在屏幕上或者view内容需要更新时就会被调用 -(void)drawRect:(CGRect) rect{ CGContextRef ctxt = UIGraphicsGetCurrentContext; /* 在drawRect:里调用UIGraphicsGetCurrentContext方法获得的就是view的Graphics Context */ // 绘制一条直线 CGContextMoveToPoint(ctxt, , ); // 设置起点 CGContextAddLineToPoint(ctxt,,); // 设置终点 CGContextSetRGBStrokeColor(ctxt, , , 1.0); // 设置线条颜色 // 设置颜色也可以用: [[UIColor GreenColor] set]; CGContextSetLineWidth(ctxt, ); // 设置线条宽度 CGContextStrokePath(ctxt); // 渲染出一条空心的线 /* 渲染为实心:CGContextStrokePath(CGContextRef Context) 线条不能渲染成实心的 */ /* [[UIColor purpleColor] setFill] 同时设置实心和颜色*/ */ [[UIColor blueColor] setStroke]; 同时设置空心和颜色*/
关于此段代码用到的表示颜色的函数:
void CGContextSetRGBStrokeColor ( CGContextRef c, CGFloat red,
CGFloat
green, CGFloat blue, CGFloat
alpha );
类似的还有:
void CGContextAddLines (
, const CGPoint *points, size_t count ); // 传入一个由点组成的数组 CGContextRef c
void CGContextAddCurveToPoint (
, CGContextRef c
CGPoint
cp1x, CGFloat cp1y, CGFloat
cp2x, CGFloat
cp2y,
x, CGFloat
y ); // 如下图CGFloat
两个ControlPoint,两个endPoint
void CGContextAddQuadCurveToPoint (
c, CGFloat cpx, CGFloat cpy, CGContextRef
CGFloat
x, CGFloat
y ); // 如下图
一个ControlPoint,一个endPoint
// 绘制三角形 -(void)drawRect:(CGRect)rect{ CGContextRef context = UIGraphicsGetCurrentContext(); CGContextMoveToPoint(context, , ); CGContextMoveToPoint(context, , ); CGContextAddLineToPoint(context, , ); CGContextClosePath(context); /* 要得到一个封闭图形,就要用CGContextClosePath方法,此方法将起点和终点连接起来 */ CGContextStrokePath(context); // 渲染图形到layer上显示 }