Core Graphics 是iOS上层UIKit实现的基础,为了更好的了解iOS的绘制体系,学习Core Graphics很有必要。自定义控件也都基于Core Graphics,所以要想在iOS开发中进行更高级的开发,必然要了解Core Graphics。
绘制的基本步骤:(在drawRect函数中)
1、获取绘图上下文
2、创建并设置路径
3、将路径添加到上下文
4、设置上下文状态
5、绘制路径
<h5>注意</h5>
想在
initWithFrame
或者其他函数里调用UIGraphicsGetCurrentContext()
函数,结果被告知invalid context 0x0.
按照文档中的说法,系统会维护一个CGContextRef
的栈,而UIGraphicsGetCurrentContext()
会取栈顶的CGContextRef
.
正确的做法是只在drawRect
里调用UIGraphicsGetCurrentContext()
,因为在drawRect之前,系统会往栈里面压入一个valid的CGContextRef,除非自己去维护一个CGContextRef,否则不应该在其他地方取CGContextRef。
常见API
//1.获取绘图上下文
CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文
//2、创建并设置路径
CGPathCreateMutable 创建一个可变的图形路径。
CGPathCreateWithEllipseInRect 创建一个椭圆的不可变路径。
CGPathCreateWithRect 创建一个矩形的不可变路径。
CGPathCreateWithRoundedRect 创建一个圆角矩形的不可变路径。
CGContextClosePath 关闭路径
//3、将路径添加到上下文
CGPathAddPath 添加一个路径到一个可变的图形路径。
//创建并添加路径到上下文(二合一)
CGContextMoveToPoint 起始坐标点
CGContextAddLineToPoint 画直线
CGContextAddEllipseInRect 画一椭圆
CGContextAddRect 画一方框
CGContextAddArc 画已曲线 前俩店为中心 中间俩店为起始弧度 最后一数据为0则顺时针画 1则逆时针
CGContextAddArcToPoint(context,0,0, 2, 9, 40);//先画俩条线从point 到 弟1点 , 从弟1点到弟2点的线 切割里面的圆
//4、设置上下文状态
CGContextSetLineCap 设置线条终点形状
CGContextSetLineDash 画虚线
CGContextSetRGBStrokeColor 设置画笔颜色
CGContextSetRGBFillColor 设置填充颜色
CGContextSetLineWidth 设置线条宽度
CGContextSetShadowWithColor 设置阴影
CGContextSetAlaha 设置透明度
5、绘制路径
CGContextStrokePath(CGContextRef _Nullable c) //绘制路径
/*
CGPathDrawingMode是填充方式,枚举类型
Fill:只有填充(非零缠绕数填充),不绘制边框
EOFill:奇偶规则填充(多条路径交叉时,奇数交叉填充,偶交叉不填充)
Stroke:只有边框
FillStroke:既有边框又有填充
EOFillStroke:奇偶填充并绘制边框
*/
CGContextDrawPath(CGContextRef _Nullable c, CGPathDrawingMode mode)
网友评论