Quartz2D学习笔记(1)

********************************** 简介 ***************************************

Quartz2D是⼀个二维绘图引擎,同时支持iOS和Mac系统。

Quartz2D能完成的工作:

  绘制图形 : 线条\三角形\矩形\圆\弧等

  绘制文字

  绘制\生成图片(图像)

  读取\生成PDF

  截图\裁剪图片

  自定义UI控件:事实上iOS中⼤部分控件的内容都是通过Quartz2D画出来的。

 

****************************** 常用属性及函数 ***********************************

CGContextRef GraphicsContext

作用

保存绘图信息,绘图状态

决定绘制的输出目标(比如输出到PDF,显示器的窗口,打印机)

Quartz2D学习笔记(1)

如何利用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 ( CGContextRef c, const CGPoint *points, size_t count ); // 传入一个由点组成的数组

void CGContextAddCurveToPoint ( CGContextRef c, CGPoint cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y,CGFloat x, CGFloat y ); // 如下图

Quartz2D学习笔记(1)        两个ControlPoint,两个endPoint

void CGContextAddQuadCurveToPoint ( CGContextRef c, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y ); // 如下图

Quartz2D学习笔记(1)   一个ControlPoint,一个endPoint

 //  绘制三角形
 -(void)drawRect:(CGRect)rect{
     CGContextRef context = UIGraphicsGetCurrentContext();
     CGContextMoveToPoint(context, , );
     CGContextMoveToPoint(context, , );
     CGContextAddLineToPoint(context, , );
     CGContextClosePath(context); /* 要得到一个封闭图形,就要用CGContextClosePath方法,此方法将起点和终点连接起来  */
     CGContextStrokePath(context); // 渲染图形到layer上显示
 }
上一篇:bcache的使用


下一篇:snpeff注释变异(variants)