iOS App开发中用CGContextRef绘制基本图形的基本示例
GraphicsContext是图形上下文,也可以理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view看作是一个画框.
CGContextRef功能强大,我们借助它可以画各种图形。开发过程中灵活运用这些技巧,可以帮助我们提供代码水平。
首先创建一个集成自UIView的,自定义CustomView类。
在CustomView.m中实现代码。
#import<QuartzCore/QuartzCore.h>
覆盖DranRect方法,在此方法中绘制图形。
CustomView写好之后,需要使用到视图控制器中。
使用方法:
CustomView*customView=[[CustomViewalloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)]; [self.viewaddSubview:customView];
写文字
-(void)drawRect:(CGRect)rect { //获得当前画板 CGContextRefctx=UIGraphicsGetCurrentContext(); //颜色 CGContextSetRGBStrokeColor(ctx,0.2,0.2,0.2,1.0); //画线的宽度 CGContextSetLineWidth(ctx,0.25); //开始写字 [@"我是文字"drawInRect:CGRectMake(10,10,100,30)withFont:font]; [superdrawRect:rect]; }
这段代码就可以很漂亮的写出四个大字:我是文字。很容易理解,每句话都有注释。
画直线
-(void)drawRect:(CGRect)rect { //获得当前画板 CGContextRefctx=UIGraphicsGetCurrentContext(); //颜色 CGContextSetRGBStrokeColor(ctx,0.2,0.2,0.2,1.0); //画线的宽度 CGContextSetLineWidth(ctx,0.25); //顶部横线 CGContextMoveToPoint(ctx,0,10); CGContextAddLineToPoint(ctx,self.bounds.size.width,10); CGContextStrokePath(ctx); [superdrawRect:rect]; }
画弧线
CGContextSetRGBStrokeColor(context,0,0,1,1);//改变画笔颜色 CGContextMoveToPoint(context,140,80);//开始坐标p1 //CGContextAddArcToPoint(CGContextRefc,CGFloatx1,CGFloaty1,CGFloatx2,CGFloaty2,CGFloatradius) //x1,y1跟p1形成一条线的坐标p2,x2,y2结束坐标跟p3形成一条线的p3,radius半径,注意,需要算好半径的长度, CGContextAddArcToPoint(context,148,68,156,80,10); CGContextStrokePath(context);//绘画路径
画圆
-(void)drawRect:(CGRect)rect { //获得当前画板 CGContextRefctx=UIGraphicsGetCurrentContext(); //颜色 CGContextSetRGBStrokeColor(ctx,0.2,0.2,0.2,1.0); //画线的宽度 CGContextSetLineWidth(ctx,0.25); //voidCGContextAddArc(CGContextRefc,CGFloatx,CGFloaty,CGFloatradius,CGFloatstartAngle,CGFloatendAngle,intclockwise)1弧度=180°/π(≈57.3°)度=弧度×180°/π360°=360×π/180=2π弧度 //x,y为圆点坐标,radius半径,startAngle为开始的弧度,endAngle为结束的弧度,clockwise0为顺时针,1为逆时针。 CGContextAddArc(ctx,100,20,20,0,2*M_PI,0);//添加一个圆 CGContextDrawPath(ctx,kCGPathStroke);//绘制路径 [superdrawRect:rect]; }
这个画圆的公式你还记得吗?你还知道M_PI是什么吗?等于多少吗?赶紧脑补一下吧!
画大圆并填充颜色
UIColor*aColor=[UIColorcolorWithRed:1green:0.0blue:0alpha: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);//绘制路径加填充
画矩形
-(void)drawRect:(CGRect)rect { //获得当前画板 CGContextRefctx=UIGraphicsGetCurrentContext(); //颜色 CGContextSetRGBStrokeColor(ctx,0.2,0.2,0.2,1.0); //画线的宽度 CGContextSetLineWidth(ctx,0.25); CGContextAddRect(ctx,CGRectMake(2,2,30,30)); CGContextStrokePath(ctx); [superdrawRect:rect]; }
画扇形
//画扇形,也就画圆,只不过是设置角度的大小,形成一个扇形 aColor=[UIColorcolorWithRed:0green:1blue:1alpha: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);