美文网首页
iOS使用CGContextRef绘制各种图形

iOS使用CGContextRef绘制各种图形

作者: edde41976524 | 来源:发表于2017-07-11 17:22 被阅读295次

首先创建一个集成自UIView的,自定义CustomView类。

在CustomView.m中实现代码。

import <QuartzCore/QuartzCore.h>

覆盖DranRect方法,在此方法中绘制图形。

画圆:

  • (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();//一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画

    CGContextSetRGBFillColor(context, 1, 0, 0, 1.0);//填充颜色

    CGContextSetRGBStrokeColor(context, 0, 1, 0, 1.0);//画线笔的颜色

    CGContextSetLineWidth(context, 1.0);//线的宽度

    CGContextAddArc(context, 140, 60, 35, 0, 2 * M_PI, 0);//添加一个圆,x,y为圆点坐标,radius半径,startAngle为开始的弧度,endAngle为 结束的弧度,clockwise 0为顺时针,1为逆时针。

    CGContextDrawPath(context, kCGPathStroke);//绘制路径
    }
    画大圆并填充颜色:
    UIColor *aColor = [UIColor colorWithRed:1 green:0.0 blue:0 alpha:1];

    CGContextSetFillColorWithColor(context, aColor.CGColor);//填充颜色

    CGContextSetLineWidth(context, 3.0);//线的宽度

    CGContextAddArc(context, 250, 40, 40, 0, 2 * M_PI, 0); //添加一个圆
    //kCGPathFill填充非零绕数规则,kCGPathEOFill表示用奇偶规则,kCGPathStroke路径,kCGPathFillStroke路径填充,kCGPathEOFillStroke表示描线,不是填充

    CGContextDrawPath(context, kCGPathFillStroke); //绘制路径加填充
    画线:
    CGPoint aPoints[2];//坐标点

    aPoints[0] =CGPointMake(100, 80);//坐标1

    aPoints[1] =CGPointMake(130, 80);//坐标2

    //CGContextAddLines(CGContextRef c, const CGPoint points[],size_t count)
    //points[]坐标数组,和count大小
    CGContextAddLines(context, aPoints, 2);//添加线

    CGContextDrawPath(context, kCGPathStroke); //根据坐标绘制路径
    画弧线:
    CGContextSetRGBStrokeColor(context, 0, 0, 1, 1);//改变画笔颜色

    CGContextMoveToPoint(context, 140, 80);//开始坐标p1

    //CGContextAddArcToPoint(CGContextRef c, CGFloat x1, CGFloat y1,CGFloat x2, CGFloat y2, CGFloat radius)
    //x1,y1跟p1形成一条线的坐标p2,x2,y2结束坐标跟p3形成一条线的p3,radius半径,注意, 需要算好半径的长度,
    CGContextAddArcToPoint(context, 148, 68, 156, 80, 10);

    CGContextStrokePath(context);//绘画路径
    画矩形:
    CGContextStrokeRect(context,CGRectMake(100, 120, 10, 10));//画方框
    CGContextFillRect(context,CGRectMake(120, 120, 10, 10));//填充框
    //矩形,并填弃颜色
    CGContextSetLineWidth(context, 2.0);//线的宽度
    aColor = [UIColor blueColor];//blue蓝色
    CGContextSetFillColorWithColor(context, aColor.CGColor);//填充颜色
    aColor = [UIColor yellowColor];
    CGContextSetStrokeColorWithColor(context, aColor.CGColor);//线框颜色
    CGContextAddRect(context,CGRectMake(140, 120, 60, 30));//画方框
    CGContextDrawPath(context, kCGPathFillStroke);//绘画路径
    画扇形:
    //画扇形,也就画圆,只不过是设置角度的大小,形成一个扇形
    aColor = [UIColor colorWithRed:0 green:1 blue:1 alpha:1];
    CGContextSetFillColorWithColor(context, aColor.CGColor);//填充颜色
    //以10为半径围绕圆心画指定角度扇形
    CGContextMoveToPoint(context, 160, 180);
    CGContextAddArc(context, 160, 180, 30, -60 * PI / 180, -120 * PI / 180, 1);
    CGContextClosePath(context);
    CGContextDrawPath(context, kCGPathFillStroke); //绘制路径
    画贝塞尔曲线:
    //二次曲线
    CGContextMoveToPoint(context, 120, 300);//设置Path的起点
    CGContextAddQuadCurveToPoint(context,190, 310, 120, 390);//设置贝塞尔曲线的控制点坐标和终点坐标
    CGContextStrokePath(context);
    //三次曲线函数
    CGContextMoveToPoint(context, 200, 300);//设置Path的起点
    CGContextAddCurveToPoint(context,250, 280, 250, 400, 280, 300);//设置贝塞尔曲线的控制点坐标和控制点坐标终点坐标
    CGContextStrokePath(context);

相关文章

网友评论

      本文标题:iOS使用CGContextRef绘制各种图形

      本文链接:https://www.haomeiwen.com/subject/flpmhxtx.html