很久没有更新博文,今天把之前就想研究的quartz2D看了下,了解了些简单的作画方法,赶紧记录下来。学习Quartz2D的主要目的是为了以后更加方便的自定义一些界面控件时用到,毕竟大部分app都有个性化的定制界面。以下纪录一些常用的简单作图方法。
想要自定义的控件基本都是继承自UIView,然后重写其drawRect方法。Quartz2D的方法都是纯c的,所有通用的步骤都是先获取上下文,然后再进行内部自定义,最后渲染,而且它的自带函数多半都是CGContext开头的:
1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
2.进行自定义做图
...具体方法在后面单个举例
3.渲染(针对不同情况,进行不同的渲染)
CGContextStrokePath(ctx); //空心
CGContextFillPath(ctx); //实心
举例1:画直线
//获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
//设置起止点
CGContextMoveToPoint(ctx,20,100); //起点
CGContextAddLineToPoint(ctx,50,150); //终点
[[UIColor redColor] set]; //设置绘制的颜色
CGContextSetLineCap(ctx,kCGLineCapRound); //起止点的样式(圆形)
CGContextSetLineJoin(ctx,kCGLineJoinRound); //转角点的样式(圆形)
//最关键的一步-----渲染
CGContextStrokePath(ctx); //要注意,线条不要渲染为实心的
举例2:画三角形
重复的方法这里不写了,仍然是先获取上下文,设置起点,第一个转折点,终点,最后再回到起点即可。
CGContextMoveToPoint(ctx,20,100); //起点
CGContextAddLineToPoint(ctx,100,100); //转折点
CGContextAddLineToPoint(ctx,50,150); //终点
CGContextAddLineToPoint(ctx,20,100); //回到起点
当然还有自带的封闭方法可以调用:
CGContextClosePath(ctx); //会自动将起点和终点连接起来
举例3:画矩形
//专用方法
CGContextAddRect(ctx,CGRectMake(100,100,100,80));
然后设置一些基本的属性后就可以渲染了,既可以渲染成空心,也可以是实心
举例4:画圆形
//专用方法(其实也是画椭圆的方法)
CGCoontextAddArc(ctx,100,100,50,0,2*M_Pi,0);
//参数要注意下:
参数2和3:圆心坐标
参数4:圆的半径
参数5:开始绘制的角度
参数6:结束绘制的角度
参数7:绘制的方向(0顺时针,1逆时针)
可以渲染成空心,也可以是实心
举例5:画椭圆
//专用方法
CGContextAddEllipseInRect(ctx,CGRectMake(100,100,50,60));
说明一下,这个方法既可以用来画椭圆,也可以用来画圆,宽高不同为椭圆,相同即为圆。
举例5:画圆弧
//这里使用的是画圆的方法
CGCoontextAddArc(ctx,100,100,50,M_Pi_2,M_Pi,0);
//然后调用连接起止点的方法即可
CGContextClosePath(ctx);
举例6:画饼形
//画饼形要先画一条直线,然后使用这条直线的长度画圆即可
CGContextMoveToPoint(ctx,100,100);
CGContextAddLineToPoint(ctx,100,150);
// 画圆
CGCoontextAddArc(ctx,100,100,50,M_Pi_2,M_Pi,0);
//最后渲染即可
这里要总结的说一点:所有的绘制过程必须写在获取上下文之后和渲染之前,这是标准的绘制过程。对于不同的需求,采取不同的渲染(空心和实心)。