图形上下文栈,即使用了栈的相关属性,将上下文保存在栈中,并进行入栈和出栈的操作。
入栈的上下文保存了相关的设置,出栈后,栈中将只保存最原始的上下文。
栈:先进后出,后进先出
效果图:
- (void)drawRect:(CGRect)rect
{
//1、获取上下文 类似于单例对象 在drawRect方法中不管调用几次都返回同一个对象
CGContextRef ctx = UIGraphicsGetCurrentContext();
//保存上下文状态 将ctx拷贝一份放到栈中
CGContextSaveGState(ctx);
//2、设置绘图状态
[[UIColor greenColor] set];
CGContextSetLineWidth(ctx, 10);
CGContextSetLineCap(ctx, kCGLineCapRound);
//3、第一根线
CGContextMoveToPoint(ctx, 50, 50);
CGContextAddLineToPoint(ctx, 250, 200);
CGContextDrawPath(ctx, kCGPathStroke);
//恢复上下文状态 将栈顶的上下文出栈,替换当前的上下文
CGContextRestoreGState(ctx);
//第二根线
CGContextMoveToPoint(ctx, 100, 200);
CGContextAddLineToPoint(ctx, 300, 300);
//4、渲染
CGContextStrokePath(ctx);//需要一个参数
//CGContextDrawPath(ctx, kCGPathStroke);//等价于上面的方法,需要两个参数
}
使用图形上下文栈可以快速设置不同的图形。