一、Core Graphics简介
Core Graphics是基于Quartz框架的高保真输出2D图形的渲染引擎。可处理基于路径的绘图、抗锯齿渲染、渐变、图像、颜色管理、PDF文档等。 Core Graphics提供了一套2D绘图功能的C语言API,使用C结构体和C的函数模拟了一套面向对象的编程机制。Core Graphics中没有OC的对象和方法。
我们日常开发时所用到的UIKit中的组件都是由Core Graphics进行绘制的。不仅如此,当我们引入UIKit框架时系统会自动引入Core Graphics框架,并且为了方便开发者使用在UIKit内部还对一些常用的绘图API进行了封装。
二、Core Graphics绘图步骤
- 获取绘图上下文
- 创建并设置路径
- 将路径添加到上下文
- 设置上下文状态
- 绘制路径
三、Core Graphics绘制图形
1.画线
- (void)drawLine:(CGContextRef)ctx{
///画线方法1
//设置起始点
CGContextMoveToPoint(ctx, 0, 5);
//添加一个点
CGContextAddLineToPoint(ctx, 50,5);
//在添加一个点,变成折线
CGContextAddLineToPoint(ctx, 50, 15);
///画线方法2
//构造线路径的点数组
CGPoint points[] = {CGPointMake(50, 0),CGPointMake(100, 5),CGPointMake(80, 18)};
CGContextAddLines(ctx,points, 3);
///画线方法3
//初始化路径
CGMutablePathRef path = CGPathCreateMutable();
//设置起始点
CGPathMoveToPoint(path, &CGAffineTransformIdentity, 100, 0);
//添加点
CGPathAddLineToPoint(path, &CGAffineTransformIdentity, 130, 18);
CGPathAddLineToPoint(path, &CGAffineTransformIdentity, 150, 5);
//将路径加入context
CGContextAddPath(ctx, path);
//描出笔触
CGContextStrokePath(ctx);
}
2.画基本图形
- (void)drawShape:(CGContextRef)ctx{
//画矩形,长宽相等就是正方形
CGContextAddRect(ctx, CGRectMake(0,20,50,20));
//画椭圆,长宽相等就是圆
CGContextAddEllipseInRect(ctx, CGRectMake(50,20,50,20));
//画三角形,多边形是通过path完成的
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, &CGAffineTransformIdentity, 150, 20);
CGPathAddLineToPoint(path, &CGAffineTransformIdentity, 120, 40);
CGPathAddLineToPoint(path, &CGAffineTransformIdentity, 180, 40);
CGPathCloseSubpath(path);
CGContextAddPath(ctx, path);
//填充路径
CGContextFillPath(ctx);
}
3.画圆、弧线、贝塞尔曲线
- (void)drawArc:(CGContextRef)ctx{
//圆
CGContextAddArc(ctx, 25, 75, 25, 0, M_PI*2 , 0);
//弧,设置圆心为起始点可以画扇形
//CGContextMoveToPoint(ctx, 75, 75);
CGContextAddArc(ctx, 75, 75, 25, 0, M_PI*1/2 , 0);
//设置起始点
CGContextMoveToPoint(ctx, 110, 50);
//添加二次曲线
CGContextAddQuadCurveToPoint(ctx, 130, 75, 190, 50);
//添加三次曲线
CGContextMoveToPoint(ctx, 110, 100);
CGContextAddCurveToPoint(ctx, 140, 50, 170, 120, 190, 75);
//描出笔触
CGContextStrokePath(ctx);
//填充路径
//CGContextFillPath(ctx);
}
- 绘制文字
- (void)drawText:(CGContextRef)ctx{ //文字样式 UIFont *font = [UIFont systemFontOfSize:15]; NSDictionary *dict = @{NSFontAttributeName:font, NSForegroundColorAttributeName:[UIColor whiteColor]}; //文字绘制 [@"I'm CC" drawInRect:CGRectMake(100 , 110, 100, 20) withAttributes:dict]; }
- 绘制生成图片(图像)
- (void)drawPicture:(CGContextRef)context{ //图片 UIImage *image = [UIImage imageNamed:@"annotation"]; [image drawInRect:CGRectMake(10, 100, 50, 50)];//在坐标中画出图片 }
- 绘制渐变
Quartz 2D的渐变方式分为两种:
线性渐变:渐变色以直线方式从开始位置逐渐向结束位置渐变
径向渐变:以中心点为圆心从起始渐变色向四周辐射,直到终止渐变色