一、接下来,我们来说这个“图形上下文栈”

1.我们还是把之前的copy这份儿代码复制一下,改个名字,叫做“02-图形上下文栈”,

好,我们把刚才那个圆形拿过来,那条线也拿过来,用CGContextAdd:这种方式,

把第一步,获取当前上下文,也拿过来,第三步,渲染,也拿过来,

打开注释,

接下来,我们把这个跑一下,应该是一个斜线,再加一个圆圈儿,

是这么一个图形啊,把这个线宽也改一下,改成10,

CGContextSetLineWidth(ctx,10);
然后呢,把颜色也改一下,来一个红色的,
[[UIColor redColor] set];

command + R,

我现在画了这么一个图形,我现在接下来,想怎么做,假如说,

左边是我的UIView,右边呢,是我的上下文,

然后,我在上下文里边画东西,当我渲染的时候,我是把这条线,移过来,


也就是说,上下文还在,只不过,上下文里边的路径,没有东西了,
然后呢,我们说,上下文里边,不仅有路径,有输出的目标,也就是这个UIView,还有什么,还有绘图的状态,绘图的状态信息啊,就是说,这个红色啊,线宽,这些东西,都是状态信息,这个上下文还在,也就意味着,你的状态信息,实际上,也还在,虽然你这一次渲染了,渲染,只不过是把路径拿走了,那么,你的绘图信息还在呢,也就是说,我现在在后面这一块儿啊,已经渲染完了,

那我可以在后面,再画一条线,先MoveToPoint,
CGContextMoveToPoint(ctx,20,20);

然后,再往(250,20)画一条线,
CGContextAddLineToPoint(ctx,250,20);

然后呢,再来一个渲染,
// 渲染
CGContextStrokePath(ctx);
command + R,

这个时候呢,我又在这个位置上,多画了一条线,每一次渲染的时候,仅仅是把路径,移到了输出目标上了,但是,你的上下文,还在的,

这张草稿纸,还在的,那你接着往草稿纸上画东西,然后,再去渲染,是没问题的,那,接下来,我要干什么,
3.我现在想呢,画第二条线的时候,换一个样式,比如说,我们就用默认的样式,我们想用这种黑色的,一像素的线,来画最后的这条线,

这个里边呢,我们就要涉及到“图形上下文栈”这个东西了,
首先,它是一个“栈”的结构,一会儿我们再来说“栈”的结构,
然后,在这个里边啊,思路是什么,首先,如果我们不设置这些颜色的话,

不设置颜色,不设置线宽,的话,那么,我们肯定画出来的都是1像素、黑色的线,

这肯定是一种样式,也就是说,这种样式信息,都是在上下文里边的,
那我创建出来的第一个上下文,哦,不是创建出来啊,我第一个获取到的这个上下文,是不是这个状态信息就是黑色的1像素的线,
