CGContextSaveGState与CGContextRestoreGState的作用
使用Quartz时涉及到一个图形上下文,其中图形上下文中包含一个保存过的图形状态堆栈。在Quartz创建图形上下文时,该堆栈是空的。CGContextSaveGState
函数的作用是将当前图形状态推入堆栈。之后,您对图形状态所做的修改会影响随后的描画操作,但不影响存储在堆栈中的拷贝。在修改完成后,您可以通过CGContextRestoreGState
函数把堆栈顶部的状态弹出,返回到之前的图形状态。这种推入和弹出的方式是回到之前图形状态的快速方法,避免逐个撤消所有的状态修改;这也是将某些状态(比如裁剪路径)恢复到原有设置的唯一方式。
UIGraphicsBeginImageContextWithOptions(targetRect.size, YES, 0.0);CGContextRef context = UIGraphicsGetCurrentContext();float myFillColor[] = {1,0,0,1}; //red;CGContextSaveGState(context);CGContextSetRGBFillColor(context, 0,1,1,1);CGContextFillRect(context, targetRect);CGContextSetFillColor(context, myFillColor);CGContextFillEllipseInRect(context, targetRect);CGContextFillPath(context);CGContextRestoreGState(context);UIImage *uiImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();
在实际的绘图过程中,对于CGContextRestoreGState() 的作用.通过查阅诸多文章,
我是这么理解的,
首先,来总结下绘图的基本流程
1.获得图形上下文:
let context = UIGraphicsGetCurrentContext();
- 1
2.设置图形上下文属性:(比如线条的起点,终点 ,线条的width ,线条的color 等等)
CGContextSetLineWidth(context, 20);CGContextMoveToPoint(context, 282, 298);
- 1
- 2
3.绘制(渲染)设置好的图形上下文状态;
CGContextStrokePath(context);
- 1
以上,就是基本绘图流程,如果你只是在一个view上, 只画一条线段,
或者只画一个圆, 那么这个流程也就没有问题,对于图形上下文来说,也只进行一次操作,
但是问题是,如果我们想要画比较复杂的图形,对于我们的创建的图形上下文来说,显然改图形上下文(context)的状态将会被多次改变,后面的绘制将对前面的绘制造成影响~~
(因为图形上下文的对象只有一个,每次通过CGCOntext命令的时候, 都是不断在修改图形上下文的属性,这个属性对于图形上下文来讲,就是唯一的,比如说设置线段的粗细为1,那么此刻图形上下文里 所有的线段 都是1粗细)*
对此,苹果设置一个保存图形上下文的栈,来随时存储当前你的图形上下文(个人感觉有点像NSUserdefault,)
通过
CGContextSaveGState(context);
- 1
来保存(推入)图形上下文到栈顶
在绘制(渲染之后),通过
CGContextRestoreGState(context);
- 1
来更新(将之前入栈的图形上下文状态出栈,将当前的图形上下文状态入栈)图形上下到栈顶
注意:这两个代码一般成对出现, 这样既保护了图形上下文状态的唯一性,也方便了在需要的地方修改图形上下状态
大概,就是这么个意思吧,欢迎补充指正
总结:
绘图的一般流程补完:
1
1. 获得图形上下文(let context = UIGraphicsGetCurrentContext();)
2.CGContextSaveGState(context); //保存当前图形上下文(入栈)
3.设置上下文状态;
4.绘制(渲染);
5.CGContextRestoreGState(context); //跟新图形上下文()
CGContextSaveGState与CGContextRestoreGState的作用相关推荐
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)...
本文转载自:http://blog.csdn.net/rhljiayou/article/details/9919713 首先了解一下CGContextRef: An opaque type that ...
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
本文转载自:http://blog.csdn.net/rhljiayou/article/details/9919713 首先了解一下CGContextRef: An opaque type that ...
- IOS开发—IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
一.绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形 //一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画CGContextRef context = UIGrap ...
- IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...
- Quartz 2d绘图
今天看了一下Quartz 2D绘图,我只想说:不要把绘图和动画那些东西当做一个很复杂的东西,其实只要你认真看还是可以理解的.他们并不难.啰嗦了几句,现在直接进入正题: 前提是我们必须新建一个singl ...
- iOS绘图详解-多种绘图方式、裁剪、滤镜、移动、CTM
iOS绘图详解 摘要: Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的 绘 ...
- iOS 图形处理 Core Graphics Quartz2D 教程
Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲 ...
- iOS图形编辑之Core Graphics
Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲 ...
- ios绘图教程(原文http://www.cocoachina.com/industry/20140115/7703.html)
os开发者平台 Cocos引擎中文官网 H5小游戏编辑器 退出chengtanze 首页 资讯 问答 论坛 Cocos2d-x 开发者中心 新手入门 专题 新闻日历 开发者通道 排行榜 代码库 图书库 ...
最新文章
- 物理如何证明上帝的存在?
- MFC文件操作大全,打开,保存,复制,删除,查找等
- 永洪报表工具_该怎么选BI工具
- Haproxy 管控台介绍
- Crash的数字表格(HYSBZ-2154)
- 迟思堂工作室编程规范:单片机C语言
- 数据结构与算法小结——排序(八)
- [Regionals 2012 :: Asia - Tokyo ]
- 如何对QQ好友的IP地址进行精准定位
- 房友软件注册码暴力输入程序
- 设计原则:单一职责(SRP)原则
- Python -运用for语句输出(九九乘法表)
- Mac创建txt文件的两种方法
- (CVPR 2022 阅读笔记)Residual Local Feature Network for Efficient Super-Resolution
- windows格式转换命令convert详解
- 李洪超 硬件工程师_听说你想做功能安全工程师?(下篇)
- 自学java不能不知道的网站----how2j
- 揭开ESP8266神秘的面纱
- UE4 如何防止overlap事件调用两次
- Flutter - Mac m1和Windows10配置flutter环境 ,iOS原生项目接入flutter
热门文章
- R语言ggplot2可视化NHANES数据集年龄和身高的关系并按照性别因子分析男性和女性的差异
- pandas使用str函数和contains函数查看dataframe特定数据列中是否匹配或包含特定模式的字符串(match or contain a pattern in column value)
- pandas使用groupby函数按照多个分组变量进行分组聚合统计、使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe)
- R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(单色填充、分组颜色填充)实战
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色配置)实战
- R语言基于遗传算法(Genetic Algorithm)进行特征筛选(feature selection)
- pandas读写结构化数据(read_csv,read_table, read_excel, read_html, read_sql)
- 关联规则概念、啤酒加尿布引出购物篮分析、频繁项集、支持度+置信度+提升度
- 深度学习之反向传播算法
- makefile:2: *** missing separator. Stop. make 之后出现的错误,解决方法