以前很不喜欢写技术文章,现在越来越喜欢写了,还是古语说得好,好记性不如烂笔头,当自己总是掉入同一个坑之后,发现记笔记是一件很重要的事情,所以,也奉劝各位,为了不再三番两次的掉同一个坑,记笔记是一件非常重要的事情呀!!!
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 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 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);
效果图:
CGContextSetRGBFillColor (context, 1, 0, 0, 1.0);//设置填充颜色
CGContextDrawPath(context, kCGPathEOFill); //绘制填充
效果图:
CGContextDrawPath(context, kCGPathStroke);
效果图:CGContextDrawPath(context, kCGPathFillStroke);
效果图:CGContextDrawPath(context, kCGPathEOFillStroke);
效果图:备注:画圆的这部分,我是没有从图上看出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);
效果图:
画弧的时候总是确定不好半径,我基本上是估算的,用上述例子,拿后面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 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 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 context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor (context, 1, 0, 0, 1.0);//设置填充颜色
CGContextAddEllipseInRect(context, CGRectMake(160, 180, 60, 15)); //椭圆
CGContextDrawPath(context, kCGPathFillStroke);
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);