美文网首页
CGContextRef

CGContextRef

作者: Amy莫莫 | 来源:发表于2017-02-17 15:27 被阅读86次

    以前很不喜欢写技术文章,现在越来越喜欢写了,还是古语说得好,好记性不如烂笔头,当自己总是掉入同一个坑之后,发现记笔记是一件很重要的事情,所以,也奉劝各位,为了不再三番两次的掉同一个坑,记笔记是一件非常重要的事情呀!!!
    CGContextRef是系统库CoreGraphics里的一个画图的,至于有什么其他的功能,我没发现,欢迎各位看官指点一二。
    以下代码都是写在UIView的-(void)drawRect:(CGRect)rect里的。
    一、画直线

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);//设置线的颜色
    CGContextSetLineWidth(context, 2);//设置线的宽度
    CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
    //画一条线
    CGContextMoveToPoint(context, 30, 50);
    CGContextAddLineToPoint(context, 100, 50);
    CGContextStrokePath(context);
    

    效果图:

    4974A01C-8D04-4E12-B2D0-CFBB43A2767F.png

    二、画多条线

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);//设置线的颜色
    CGContextSetLineWidth(context, 2);//设置线的宽度
    CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
    //  同时依次画多条线
    CGPoint lines[] = {
        CGPointMake(10.0, 90.0),
        CGPointMake(60.0, 60.0),
        CGPointMake(110.0, 90.0),
        CGPointMake(160.0, 60.0),
        CGPointMake(210.0, 90.0),
        CGPointMake(260.0, 60.0),
    };
     //  参数二:线数组,参数三:线的个数
    CGContextAddLines(context, lines, sizeof(lines)/sizeof(lines[0]));
    CGContextStrokePath(context);
    

    效果图:


    A9F29A1B-8098-4C42-BA38-C01CA288E65D.png

    三、画圆

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);//设置线的颜色
    CGContextSetLineWidth(context, 2);//设置线的宽度
    CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
    CGContextSetRGBStrokeColor(context,1,1,1,1.0);//画笔线的颜色
    CGContextSetLineWidth(context, 1.0);//线的宽度
    //参数2:x 参数3:y 参数4:半径 参数5:开始的弧度 参数6:结束的弧度 参数7:顺时针:0 逆时针:1
    CGContextAddArc(context, 100, 100, 15, 0, 2*PI, 0); //添加一个圆
     //  kCGPathFill,   绘制填充
         kCGPathEOFill, 奇偶规则
         kCGPathStroke,  绘制路径
         kCGPathFillStroke, 绘制路径加填充
         kCGPathEOFillStroke 描线
    CGContextDrawPath(context, kCGPathFill); 
    

    效果图:


    E02AE7C1-A251-47CC-A3FB-E75DD3C16870.png
    CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
    CGContextDrawPath(context, kCGPathEOFill); //绘制填充
    

    效果图:


    B9956DBD-6D0D-4841-B35D-6FD97BB8AE00.png
    CGContextDrawPath(context, kCGPathStroke);
    
    效果图: 7DE2F53E-6ADB-4D65-95DF-1781E862E860.png
    CGContextDrawPath(context, kCGPathFillStroke);
    
    效果图: 42C4FEF5-E682-49BA-8101-2A515187A389.png
    CGContextDrawPath(context, kCGPathEOFillStroke);
    
    效果图: FC358854-FE89-4AA6-85D9-CA0FAD0E406D.png

    备注:画圆的这部分,我是没有从图上看出1,2还有4,5的模式有什么区别?

    四、画弧

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
    CGContextSetLineWidth(context, 2);//设置线的宽度
    CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
     CGContextSetRGBStrokeColor(context, 1, 1, 1, 1);//改变画笔颜色
    CGContextMoveToPoint(context, 100, 100);//开始坐标p1
    CGContextAddArcToPoint(context, 150, 80, 150, 150, 40);
    CGContextStrokePath(context);
    

    效果图:


    4D99BF41-1FB8-4C40-9545-FF5E3870482F.png

    画弧的时候总是确定不好半径,我基本上是估算的,用上述例子,拿后面x的坐标减去开始点的x的坐标,150-100=50,说明半径肯定不超过50,想要圆弧比较好看,就设置了一个40。像这种两点加半径确定圆弧的,说实话,我也不知道确切的该怎么算,用圆的公式好像也算不对
    五、画矩形

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
    CGContextSetLineWidth(context, 2);//设置线的宽度
    CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
    CGContextStrokeRect(context,CGRectMake(100, 120, 50, 50));//画方框
    CGContextFillRect(context,CGRectMake(120, 120, 50, 50));//填充框
    CGContextStrokePath(context);//绘画路径
    

    效果图:

    B541B3E5-6D3A-412E-AE2A-2C8267B185DF.png
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2);//设置线的宽度
    CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);//填充颜色
    CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);//线框颜色
    CGContextAddRect(context,CGRectMake(140, 120, 60, 30));//画方框
    CGContextDrawPath(context, kCGPathFillStroke);//绘画路径
    
    F4394E6A-5CA4-4C08-9059-66DE718307FA.png
     CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2);//设置线的宽度
    CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
    CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0 green:1 blue:1 alpha:1].CGColor);//填充颜色
    CGContextMoveToPoint(context, 160, 180);
    CGContextAddArc(context, 160, 180, 30,  -60 * PI / 180, -120 * PI / 180, 1);
    CGContextClosePath(context);
    CGContextDrawPath(context, kCGPathFillStroke); //绘制路径
    
    4245BB55-AC6D-43B6-93D0-CEAD2286DF3C.png
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
    CGContextAddEllipseInRect(context, CGRectMake(160, 180, 60, 15)); //椭圆
    CGContextDrawPath(context, kCGPathFillStroke);
    
    2DA87CC8-218A-431D-A7E5-3D168611D02B.png
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
    CGPoint sPoints[3];//坐标点
    sPoints[0] =CGPointMake(100, 220);//坐标1
    sPoints[1] =CGPointMake(130, 220);//坐标2
    sPoints[2] =CGPointMake(130, 160);//坐标3
    CGContextAddLines(context, sPoints, 3);//添加线
    CGContextClosePath(context);
    CGContextDrawPath(context, kCGPathFillStroke);
    
    9D49D6CA-652A-408C-80B8-8E9B71915C01.png

    相关文章

      网友评论

          本文标题:CGContextRef

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