原文出处 http://blog.csdn.net/u014286994/article/details/51333118
/* CoreGraphics - CGContext.h */
/** Graphics state functions. **/
//为了让开发者在进行坐标变换时无须计算多次坐标变换后的累加结果,Quartz 2D还提供了如下两个方法来保存、恢复绘图状态
/*
保存CGContextRef当前的绘图状态,方便以后恢复该状态*/
void CGContextSaveGState(CGContextRef__nullable c)
// 需要说明的是,CGContextSaveGState()函数保存的绘图状态,不仅包括当前坐标系统的状态,也包括当前设置的填充风格、线条风格、阴影风格等各种绘图状态。但 CGContextSaveGState()函数不会保存当前绘制的图形
/*
把CGContextRef的状态恢复到最近一次保存时的状态*/
void CGContextRestoreGState(CGContextRef__nullable c)
/** Coordinate space transformations. **/
/* 缩放坐标系统
该方法控制坐标系统水平方向上缩放 sx,垂直方向上缩放 sy。在缩放后的坐标系统上绘制图形时,所有点的 X 坐标都相当于乘以 sx 因子,所有点的 Y 坐标都相当于乘以 sy因子。*/
void CGContextScaleCTM(CGContextRef__nullable c, CGFloat sx, CGFloat sy)
/* 平移坐标系统
该方法相当于把原来位于 (0, 0) 位置的坐标原点平移到 (tx, ty)点。在平移后的坐标系统上绘制图形时,所有坐标点的 X坐标都相当于增加了 tx,所有点的 Y坐标都相当于增加了 ty。*/
void CGContextTranslateCTM(CGContextRef__nullable c,
CGFloat tx, CGFloat ty)
/* 旋转坐标系统
该方法控制坐标系统旋转 angle 弧度。在缩放后的坐标系统上绘制图形时,所有坐标点的 X、Y坐标都相当于旋转了 angle弧度之后的坐标。*/
void CGContextRotateCTM(CGContextRef__nullable c, CGFloat angle)
/*
使用 transform变换矩阵对 CGContextRef的坐标系统执行变换,通过使用坐标矩阵可以对坐标系统执行任意变换。*/
void CGContextConcatCTM(CGContextRef__nullable c,
CGAffineTransform transform)
/* 获取CGContextRef的坐标系统的变换矩阵*/
CGAffineTransform CGContextGetCTM(CGContextRef__nullable c)
/** Drawing attribute functions. **/
/*
设置绘制直线、边框时的线条宽度*/
void CGContextSetLineWidth(CGContextRef__nullable c, CGFloat width)
/*
设置线段端点的绘制形状。该属性支持如下三个值。*/
typedef CF_ENUM(int32_t, CGLineCap) {
kCGLineCapButt, //该属性值指定不绘制端点,线条结尾处直接结束。这是默认值。
kCGLineCapRound,//该属性值指定绘制圆形端点,线条结尾处绘制一个直径为线条宽度的半圆。
kCGLineCapSquare//该属性值指定绘制方形端点。线条结尾处绘制半个边长为线条宽度的正方形。需要说明的是,这种形状的端点与“butt”形状的端点十分相似,只是采用这种形式的端点的线条略长一点而已
};
void CGContextSetLineCap(CGContextRef__nullable c, CGLineCap cap)
typedef CF_ENUM(int32_t, CGLineJoin) {
kCGLineJoinMiter, // 这是默认的属性值。该方格的连接点形状如图1所示。
kCGLineJoinRound, // 稍微圆角, 该方格的连接点形状如图2所示。
kCGLineJoinBevel // 斜角,该方格的连接点形状如图3所示。
};
图1 图2
图3
/*
设置线条连接点的风格,该属性支持如上三个值:*/
void CGContextSetLineJoin(CGContextRef__nullable c, CGLineJoin join)
/*
当把连接点风格设为meter风格时,该方法用于控制锐角箭头的长度*/
void CGContextSetMiterLimit(CGContextRef__nullable c, CGFloat limit)
/*
Linedash pattern(虚线模式)允许我们沿着描边绘制虚线。我们通过在CGContextSetLineDash结构体中指定虚线数组和虚线相位来控制虚线的大小及位置。
其中lengths属性指定了虚线段的长度,该值是在绘制片断与未绘制片断之间交替。phase属性指定虚线模式的起始点。图3-11显示了虚线模式:*/
void CGContextSetLineDash(CGContextRef__nullable c, CGFloat phase,const CGFloat *__nullable lengths, size_t count)
/* 设置弯曲的路径中的图形上下文的准确性。*/
void CGContextSetFlatness(CGContextRef__nullable c, CGFloat flatness)
/*
设置全局透明度*/
void CGContextSetAlpha(CGContextRef__nullable c, CGFloat alpha)
/*
设置CGContextRef的叠加模式。Quartz 2D支持多种叠加模
*/void CGContextSetBlendMode(CGContextRef __nullable c, CGBlendMode mode)
/** Path construction functions. **/
/* Note that a context has a single path in use at any time: a path is not
part of the graphics state. */
/* 开始创建路径. */
void CGContextBeginPath(CGContextRef__nullable c)
/* 开始一个新的子路径点 */
void CGContextMoveToPoint(CGContextRef__nullable c,
CGFloat x, CGFloat y)
/* 添加一条直线段从当前指向的(x,y)。 */
void CGContextAddLineToPoint(CGContextRef__nullable c,
CGFloat x, CGFloat y)
/**
* 从当前添加一个三次Bezier曲线
* @param cp1x 控制点1 x坐标
* @param cp1y 控制点1 y坐标
* @param cp2x 控制点2 x坐标
* @param cp2y 控制点2 y坐标
* @param x 直线的终点 x坐标
* @param y 直线的终点 y坐标
*/
void CGContextAddCurveToPoint(CGContextRef__nullable c, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y)
/**
* 从当前添加一个二次Bezier曲线
* @param cpx