Quartz2D绘图

Quartz2D是苹果官方的一个二维绘图引擎,包含在Core Graphics框架中.Quartz2D能做的事情:

1.绘图

2.绘制文字

3.截图/剪裁图片

4.自定义UI控件

 

Quartz2D绘图步骤:

1.获取图形上下文对象  CGContextRef ctx = UIGraphicsGetCurrentContext();

2.向图形上下文对象中添加路径

3.渲染

 

图形上下文:CGContextRef包含了:绘图路径/绘图状态/输出目标

 

Quartz2D两种绘图方式:

1.直接使用Quartz2D的API绘图,纯C语言,代码量稍大.

2.调用UIKit封装好的框架绘图,代码较简单,使用UIBezierPath时,无须手动获取图形上下文对象.

 

一.直接使用Quartz2D的API绘一个圆

 1 - (void)drawRect:(CGRect)rect{
 2     
 3     CGContextRef ctx = UIGraphicsGetCurrentContext();
 4     
 5     CGMutablePathRef path = CGPathCreateMutable();
 6     
 7     CGPathAddEllipseInRect(path, NULL, CGRectMake(100, 100, 100, 100));
 8     
 9     CGContextAddPath(ctx, path);
10     
11     CGContextStrokePath(ctx);
12     
13     CGPathRelease(path);
14 }

 

quarzt2d中带有creat/copy/retain方法创建出来的值都必须手动的释放.

通过 CFRelease(任何类型);可以释放任何类型。

 

二.用UIKit封装好的框架绘图

1 - (void)drawRect:(CGRect)rect{
2   
3     UIBezierPath *path1 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 200, 200)];
4     [path1 stroke];
5 
6 }

 

问题:

  1.为什么要实现DrawRect方法才能绘图?

    因为在DrawRect方法中才能获取到跟view相关联的图形上下文对象.

  2.DrawRect方法在什么时候被调用?

    在view第一次显示在屏幕上时(加载到Window显示出来)会被调用.

    重绘的时候(调用setNeedsDisplay或setNeedsDisplayInRect:)

  3.Quartz2D常用拼接路径API

    新建一个起点

    void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y)

     添加新的线段到某个点

    void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y)

     添加一个矩形

    void CGContextAddRect(CGContextRef c, CGRect rect)

     添加一个椭圆

    void CGContextAddEllipseInRect(CGContextRef context, CGRect rect)

     添加一个圆弧

    void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y,CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)

  4.常用绘制路径函数

    Mode参数决定绘制的模式

    void CGContextDrawPath(CGContextRef c, CGPathDrawingMode mode)

     绘制空心路径

    void CGContextStrokePath(CGContextRef c)

    绘制实心路径

    void CGContextFillPath(CGContextRef c)

  5.图形上下文栈的操作

    将当前【图形上下文】中的绘图状态信息保存到

    void CGContextSaveGState(CGContextRef c)

    将栈顶的绘图状态出栈, 替换掉当前的图形上下文中的绘图状态

    void CGContextRestoreGState(CGContextRef c)

 

posted @ 2016-05-15 22:38  wwh99  阅读(147)  评论(0)    收藏  举报