学习过程中接触过一点quartz2D的内容,也有过一些应用,quartz2D在实际的iOS开发中并不常用,在这里仅仅做一个简单的总结。
1. quartz2D:是一个二维绘图引擎,同事支持iOS和Mac系统。使用quartz2D能够完成很多的工作,如绘制线条,三角形,矩形,圆,弧等。还有绘制文字,绘制生成图片,读取生成PDF,截图,剪裁图片,自定义UI控件等。
2. quartz2D很重要的一个应用就是自定义view。使用quartz2D自定义view的步骤:
(1)新建一个类,继承自UIView
(2)实现 - (void) drawRect:(CGRect)rect方法,在这个方法里
取得跟当前view相关联的图形上下文
绘制相应的图形内容
利用图形图形上下文将绘制的所有的内容渲染显示到view上面。
附:当view第一次显示到屏幕上时(被加到UIWindow上显示出来)或者 调用view的setNeedsDisplay或setNeedsDisplayInRect时 会调用- (void) drawRect:(CGRect)rect方法。
3. quartz2D的简单使用
(1)画线
//2.1绘制图形 --画一条直线,在画图形的时候都要通过CGContextRef,图形上下文来有一个过度的作用,所有的方法的第一个参数都是一个 图形上下文数据
CGContextRef context = UIGraphicsGetCurrentContext();
//2.2 设置画的直线的属性 - Stroke 线的颜色
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1);
//2.3 线的宽度
CGContextSetLineWidth(context, 20);
//2.4 线的头尾样式 - 一共有三种样式,一种是圆角,一种是直角(默认的),两种直角的样式没多大区别
CGContextSetLineCap(context, kCGLineCapRound);
//2.5 线的连接处的样式 - 也是三种样式
CGContextSetLineJoin(context, kCGLineJoinMiter);
//1.取得与view相关联的图形上下文 CGContextRef 是c语言的一种数据类型,而UIGraphicsGetCurrentContext()这个方法是将 图形上下文 关联到当前类的view上
//这个方法的作用是在这个view中指定一个当前点(current point),就是(10,10)
CGContextMoveToPoint(context, 10, 10);
//连接current point点与下面指定的点连成一条直线,随后下面的点就会成为 current point
CGContextAddLineToPoint(context, 100, 110);
// 从current point 上再引导一条线
CGContextAddLineToPoint(context, 180, 120);
//3.利用图形上下文将绘制的图形显示到view上 -- 渲染
CGContextStrokePath(context);
(2)画圆
//创建 图形上下文 与 view 相关联
CGContextRef context = UIGraphicsGetCurrentContext();
//创建图形 -- Ellipse :表示椭圆,可以用来画 圆 ,第二个参数表示在这个大小的矩形里面画出一个圆,猜测是在圆里面 ,还可以使用画圆弧的方法,只不过弧度是从0到2pi,
CGContextAddEllipseInRect(context, CGRectMake(10, 10, 100, 100));
//渲染
CGContextStrokePath(context);
(3) 扇形
//创建 图形上下文 与 view 相关联
CGContextRef context = UIGraphicsGetCurrentContext();
//创建图形 画 扇形的方法:设置一个current point起点,然后画一个弧形,关闭即可
CGContextMoveToPoint(context, 100, 100);
CGContextAddArc(context, 100, 100, 60, 0, 5*M_PI_4, 1);
CGContextClosePath(context);
//渲染
CGContextStrokePath(context);
所有绘制图形的方法都差不多,都是先获取到图形上下文,画图形,最后渲染显示到view上。
(4)画文字和图片到view上
画文字和图片不需要创建 图形上下文 和 渲染 步骤,因为在调用画图片和文字的方法的时候系统已经把这两个步骤给封装好了,只需要做的步骤就是将文字和图片画在view上就可以了,这是与画线和画图形的不同之处
文字:
[name drawInRect:CGRectMake(0, 0, 220, 100) withAttributes:dic];
图片:
//方法1
// [image drawAtPoint:CGPointMake(0, 0)];
//方法2,这个方法能指定具体显示的大小,在这个范围内将图片压缩或者是拉伸
// [image drawInRect:CGRectMake(0, 0, 100, 100)];
//方法3,这个方法也是指定大小范围,在这个范围里,若范围小于图片,则图片会被剪裁,若范围大于图片,图片会被平铺
[image drawAsPatternInRect:CGRectMake(0, 0, 180, 200)];