Quart2D绘图学习

387 阅读2分钟

好久没有写学习的文章了,最近的事情比较多,忙着装修,忙着工作赶进度(其实就是懒),最近呢,忙完了项目。准备写这篇Quart2D绘图的文章。

借鉴学习材料来自[CoderZb] ###侵删

首先介绍一下Quartz2D是啥? [Quartz 2D Programming Guide]

Quartz2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz2D的API是纯C语⾔言的Quartz2D的API来自于Core Graphics框架 主要用到的是 CGContextRef(Quartz 2D绘图环境)以及UIBezierPath(Quartz 2D绘图手段:由直线和曲线线段组成的路径,在自定义视图中呈现这些线段)

常见的画图方式

1画直线

-(void)drawRect:(CGRect)rect
{
    ///画直线
//获取上线文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
//描述路径
    UIBezierPath *path = [UIBezierPath bezierPath];
//设置起点
    [path moveToPoint:CGPointMake(50, 150)];
//添加线到某一个点
    [path addLineToPoint:CGPointMake(250, 50)];
    
//    [path moveToPoint:CGPointMake(50, 250)];
    [path addLineToPoint:CGPointMake(250, 100)];
    //设置线宽
    CGContextSetLineWidth(ctx, 15);
//设置线的连接方式
    CGContextSetLineJoin(ctx, kCGLineJoinBevel);
//设置线的顶角样式
    CGContextSetLineCap(ctx, kCGLineCapSquare);
    //设置颜色
    [[UIColor redColor] set];
    //把描述路径添加的上下文中
    CGContextAddPath(ctx, path.CGPath);
//把上下文当中绘制的内容渲染到跟view相关联的layer
    CGContextStrokePath(ctx);
}

WeChatc90b89e7aba9ffed5be37f3500f826f9.png

2画矩形(正方形是特殊的矩形)

///画矩形描边或者填充颜色
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(50, 50, 200, 200)];
    CGContextAddPath(ctx, path.CGPath);
    
    [[UIColor redColor] set];
    
//描边
    CGContextStrokePath(ctx);
//填充
//    CGContextFillPath(ctx);

WeChat7bd8c899ffc43925652fa9e4e64e5b39.png

WeChatccaf32b0fad8c54cded8049382624926.png

3画扇形

    ///画扇形或者填充
//描述圆心位置
    CGPoint center = CGPointMake(rect.size.width/2, rect.size.height/2);
//圆心半径
    CGFloat radius = rect.size.width/2 ;
//开始角度
    CGFloat startA = 0;
//结束角度
    CGFloat endA = -M_PI_2;
    
/*
M_PI的含义:π
M_PI * 2的含义:2π
M_PI_2的含义:π/2
M_PI / 2的含义:π/2
    // 画的图形路径
    //bezierPathWithArcCenter:弧所在的圆心
    //radius:圆的半径
    //startAngle:开始角度,圆的最右侧为0度
    //endAngle:截至角度,向下为正,向上为负.
    //clockwise:时针的方向,yes:顺时针 no:逆时针
*/
    UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:NO];
    [path addLineToPoint:center];
    [path closePath];
    [[UIColor redColor] set];
//    [path fill];
    [path stroke];

WeChat73108ce9da3ad9ced8a8028e5f128dce.png

绘制一般的步骤基本是这样的

1 获取当前的上下文(这里只能获取一次,并且只能在drawRect方法中获取) 2 描述路径、形状(就是处理想要显示的样子) 3 把描述好的路径、形状添加早上下文中 4 显示上下文内容