Quartz2D的使用

Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统,在App中需要绘制各种之定义的UI就需要用到这个,例如在淘宝或者百度外卖的头部的波浪线的使用。

Quartz 2D能绘制图形 : 线条\三角形\矩形\圆\弧等.
裁剪图片、手势解锁、自定义UIView控件。

图形上下文(Graphics Context)

  1. 是一个CGContextRef类型的数据

  2. 图形上下文的作用:保存绘图信息、绘图状态

  3. 决定绘制的输出目标(绘制到什么地方去?)
    (输出目标可以是PDF文件、Bitmap或者显示器的窗口上)

    绘制好的图形——-保存到—–>图形上下文—-输出—>目标

相同的一套绘图序列,指定不同的Graphics Context,就可将相同的图像绘制到不同的目标上

  1. Quartz2D提供了以下几种类型的Graphics Context:

    Bitmap Graphics Context
    PDF Graphics Context
    Window Graphics Context
    Layer Graphics Context
    Printer Graphics Context
    

如何利用Quartz2D自定义UI控件?

  1. 如何利用Quartz2D绘制东西到view上?
    首先,得有图形上下文,因为它能保存绘图信息,并且决定着绘制到什么地方去
    其次,那个图形上下文必须跟view相关联,才能将内容绘制到view上面

  2. 自定义UI控件的步骤

    新建一个类,继承自UIView
    实现-(void)drawRect:(CGRect)rect方法,然后在这个方法中,可以:
            1.取得跟当前view相关联的图形上下文
            2.绘制相应的图形内容,绘制时产生的线条称为路径。 路径由一个或多个直线段或曲线段组成。
            3.利用图形上下文将绘制的所有内容渲染显示到view上面
        也可以:
            利用UIKit封装的绘图函数直接绘图.
    

drawRect

  1. 为什么要实现drawRect:方法才能绘图到view上?
    因为在drawRect:方法中才能取得跟view相关联的图形上下文.rect相当于self.bounds。
    【补充】viewDidLoad先调用,drawRect后调用。

  2. drawRect:方法在什么时候被调用?
    当view第一次显示到屏幕上时(被加到UIWindow上显示出来)
    调用view的setNeedsDisplay或者setNeedsDisplayInRect:时。
    UIView的内容需要更新时,

绘制直线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- (void)drawRect:(CGRect)rect
{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.拼接路径
UIBezierPath *path = [UIBezierPath bezierPath];
// 设置起点
[path moveToPoint:CGPointMake(10, 125)];
// 添加一条线到某个点
[path addLineToPoint:CGPointMake(230, 125)];
// 3.把路径添加到上下文
CGContextAddPath(ctx, path.CGPath);
CGContextAddPath(ctx, path1.CGPath);
// 设置绘图状态
// 设置线宽
CGContextSetLineWidth(ctx, 10);
CGContextSetLineCap(ctx, kCGLineCapRound);
//CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);
[[UIColor redColor] set];

// 4.渲染上下文到视图
CGContextStrokePath(ctx);

绘制曲线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (void)drawRect:(CGRect)rect
{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();

// 2.拼接路径
UIBezierPath *path = [UIBezierPath bezierPath];

CGPoint startP = CGPointMake(10, 125);
CGPoint endP = CGPointMake(240, 125);
CGPoint controlP = CGPointMake(125, 0);
[path moveToPoint:startP];
[path addQuadCurveToPoint:endP controlPoint:controlP];

// 3.把路径添加到上下文
CGContextAddPath(ctx, path.CGPath);

// 4.渲染上下文到视图
CGContextStrokePath(ctx);

}
文章目录
  1. 1. 绘制直线
  2. 2. 绘制曲线
本站总访问量 本站访客数人次 ,