Quartz 2D绘图

转载自:http://www.jianshu.com/p/5159c0fe01ab


1. Quartz概述

Quartz是Mac OS X的Darwin核心之上的绘图层,有时候也认为是CoreGraphics(制图)。

共有两种部分组成Quartz:

Quartz Compositor,合成视窗系统,管理和合成幕后视窗影像来建立Mac OS X使用者接口。(了解,即幕后工作)

Quartz 2D,是iOS和Mac OS X环境下的二维绘图引擎。(熟练,幕前工作,由我们来操作的)

涉及内容包括:基于路径的绘图,透明度绘图,遮盖,阴影,透明层,颜色管理,防锯齿渲染,生成PDF,以及PDF元数据相关处理

2. 绘制基本几何图形

视图绘制

在iOS上,所有的绘制,无论是否采用OpenGL、Quartz、UIKit、或者 Core Animation—都发生在UIView对象的区域内。

视图定义绘制发生的屏幕区域。如果您使用系统提供的视图,绘制工作会自动得到处理(以前使用的UIView就是)。然而,如果您定义自己的定制视图,则必须自行提供绘制代码(今天要做的)。

ps:

OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。2d游戏图形引擎用的就是它

视图绘制周期

iPhone的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView 的类,并重写drawRect方法,在这里进行绘图操作,程序会自动调用此方法进行绘图。

描绘系统会调用UIView对象的drawRect:方法,并向它传入一个包含需要重画的视图区域的矩形。

在UIView中,重写drawRect: (CGRect) aRect方法,可以自己定义想要画的图案.且此方法一般情况下只会画一次.也就是说这个drawRect方法一般情况下只会被调用一次.

1.drawRect调用是在Controller->loadView, Controller->viewDidLoad 两方法之后掉用的.所以不用担心在控制器中这些View的drawRect就开始画了.这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量值).
2.如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。
3.当某些情况下想要手动重画这个View,只需要掉用[self setNeedsDisplay]方法即可.
setNeedsDisplay会调自动调用drawRect方法,这样可以拿到  UIGraphicsGetCurrentContext,就可以画画了。

图形上下文

在调用您提供的drawRect:方法之前,视图对象会自动配置其绘制环境,使您的代码可以立即进行绘制。作为这些

配置的一部分,UIView对象会为当前绘制环境创建一个图形上下文(对应于CGContextRef封装类型)。

该图形上下文包含绘制系统执行后续绘制命令所需要的信息,定义了各种基本的绘制属性,比如绘制使用的颜色、

裁剪区域、线的宽度及风格信息、字体信息、合成选项、以及几个其它信息。

绘制路径

路径用于描述由一序列线和Bézier曲线构成的2D几何形状。Core Graphics中也有一些用于创建简单路径(比如矩形和椭圆形)的便利函数。对于更为复杂的路径,必须用Core Graphics框架提供的函数自行创建。

//1.画线段
[self drawLine:contenxtRef];
//2.画三角形
[self drawTriangle:contenxtRef];
//3.画矩形
[self drawRectWithContextRef:contenxtRef];
//4.画圆
[self drawCircle:contenxtRef];
//5.扇形
[self drawArc:contenxtRef];
//6.曲线(贝塞尔曲线)

贝塞尔曲线:
Bézier曲线是法国数学家“贝塞尔”在工作中发现,任何一条曲线都可以通过与它相切的控制线两端的点的位置来定义。
是应用于二维图形应用程序的数学曲线。
也就是说,给个起点和终点,使用控制点就能确定一条曲线

3. 绘制图像和文本

UIImages的-drawRect:方法绘制图像:

- [UIImage drawAtPoint:(CGPoint)point] 
- [UIImage drawInRect:(CGRect)rect]
- [UIImage drawAsPatternInRect:(CGRect)rect]

NSString的-drawRect:方法绘制文本:

- (void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs
- (void)drawInRect:(CGRect)rect withAttributes:(NSDictionary *)attrs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值