两种绘图框架UIKIT、Core Graphics,三种获取上下文方式

1、UIKIT

UIKIT只能在当前上下文绘制,苹果封装了UIKIT内部的很多类,使他们可以在当前上下文直接绘制,比如UIImage(绘制图片)、UIColor(绘制颜色)、UIBezierPath(绘制贝塞尔曲线)、NSString(绘制文本)等等,以面向对象的方式来实现了绘制。

2、Core Graphics

Core Graphics是苹果自己实现的一套基于C的绘图API,使用它的条件是获得上下文的引用(CGContextRef)

绘图上下文获取方式

想要绘图则需要两个东西,一个是上面提到的绘图框架(相当于画笔、墨汁等),另一个就是绘图上下文(相当于画布),那么绘图上下文怎么获得呢?有三种方法:

1. UIGraphicsBeginImageContextWithOptions()方法(位图上下文,绘图后需要调用UIGraphicsEndImageContext)

2. drawRect:(CGRect)rect方法(图层上下文,无法手动创建)

3. drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx方法

UIKIT绘图在drawRect和UIGraphicsBeginImageContextWithOptions方式获取上下文的情况下,可以直接使用,因为在drawRect内部其实就相当于是在当前上下文中,而UIGraphicsBeginImageContextWithOptions方法创建的图形上下文也属于是当前上下文。但是在drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx中我们只是拿到了一个图形上下文的引用,此时我们需要用UIGraphicsPushContext 方法将context参数转换为当前上下文,最后使用UIGraphicsPopContext恢复上下文环境

Core Graphics在使用之前只要获得上下文引用即可进行绘图,如果没有上下文引用,可以通过UIGraphicsGetCurrentContext获得上下文应用,

两种绘图框架,三种获取上下文方式,那么我们绘图其实就有了六种方法。

待补充。。。

CGContextSaveGState方法和CGContextRestoreGState方法的作用,自己画了个图:如下

ios开发绘图 ios 绘图_Core