【绘图案例-图形上下文栈 Objective-C语言】

本文详细介绍了Objective-C中图形上下文栈的概念和使用,通过实例展示了如何利用图形上下文栈进行绘图状态的备份与恢复,以实现不同线条样式和颜色的切换。内容包括获取上下文、设置颜色和线宽、渲染路径以及使用CGContextSaveGState和CGContextRestoreGState方法进行状态管理。
摘要由CSDN通过智能技术生成

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

通知

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像素的线,

通知

当前,我们获取到的这个上下文,它默认的这个信息,就是黑色的1像素的线,然后呢,我们现在干什么,我们现在把这个上下文里边的状态信息,把它备份一下,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值