CGContextRef

以前很不喜欢写技术文章,现在越来越喜欢写了,还是古语说得好,好记性不如烂笔头,当自己总是掉入同一个坑之后,发现记笔记是一件很重要的事情,所以,也奉劝各位,为了不再三番两次的掉同一个坑,记笔记是一件非常重要的事情呀!!!
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);

效果图:

CGContextRef_第1张图片
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);

效果图:


CGContextRef_第2张图片
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); 

效果图:


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

效果图:


CGContextRef_第4张图片
B9956DBD-6D0D-4841-B35D-6FD97BB8AE00.png
CGContextDrawPath(context, kCGPathStroke);

效果图:
CGContextRef_第5张图片
7DE2F53E-6ADB-4D65-95DF-1781E862E860.png
CGContextDrawPath(context, kCGPathFillStroke);

效果图:
CGContextRef_第6张图片
42C4FEF5-E682-49BA-8101-2A515187A389.png
CGContextDrawPath(context, kCGPathEOFillStroke);

效果图:
CGContextRef_第7张图片
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);

效果图:


CGContextRef_第8张图片
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);//绘画路径

效果图:

CGContextRef_第9张图片
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);//绘画路径
CGContextRef_第10张图片
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); //绘制路径
CGContextRef_第11张图片
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);
CGContextRef_第12张图片
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);
CGContextRef_第13张图片
9D49D6CA-652A-408C-80B8-8E9B71915C01.png

你可能感兴趣的:(CGContextRef)