iOS Quartz2D画图
对于刚接触Quartz2D的同学来说,先了解 上下文 的概念,再从最基础的画线来具体体验Quartz2D的画图步骤
介绍Quart2D :是苹果官方的二维(平面)绘图引擎,同时支持iOS和macOS系统,它的API是纯C语言的,它可以绘制图形、绘制文字、绘制图片、截图、自定义UI控件
在iOS开发中,Quartz2D最常用来自定义UI控件。
Quartz2D画图步骤: 1:获取图形上下文对象 2 向图形上下文对象中添加路径,绘图属性等等 3 渲染(把图形上下文中的路径绘制到对应的输出设备上)
介绍图形上下文(Graphics Context):是一个CGContextRef类型的数据。对于初学者,不要抱有很大压力,说白了就是我们小时候画图的时候,先要有草稿纸,在草稿纸先描绘一下,再誊抄到画板上,上下文其实就好比草稿纸。
图形上下文主要包含以下几个信息:1绘图路径(各种各样的图形:直线,三角形,圆形....) 2绘图状态:(颜色,线宽,样式,旋转...) 3输出目标:(绘制到什么地方去?UIView,图片,pdf...) 所以,相同的绘图序列,制定不同的上下文,就可以吧图形绘制到不同的目标上。如果概念大家看不明白的话,那就在代码中体验上下文的作用。
下面介绍5种绘图方式,大家慢慢体会
首先做一些准备工作:
接下来,打开自定义的类HFView.m文件,在-(void)drawRect:(CGRect)rect;方法中绘图
为什么要在这个方法里面绘图。1因为只有在这个方法中才可以获得图形上下文,在别的方法中无法获取到上下文,

并且-(void)drawRect:(CGRect)rect;无法在别的方法中调用,因为只有系统自己调用这个方法才能获取上下文,自己手动调用是获取不到上下文的

总结:绘图代码之所以写在-(void)drawRect:(CGRect)rect方法中,是因为:1 只有在这个方法中才能获取到上下文,2 这个方法只有系统调用的时候,才能获取上下文,自己在别的方法中手动调用,是获取不到上下文的。
下面,开始编写代码:
第一种:纯C语言,直接将路径添加到上下文中

第二种:纯C语言,先创建C路径,再添加到上下文里面

第三种:C语言,嵌套OC路径

第四种:C语言 C路径嵌套OC路径

第五种 纯OC [大家可以体验面向对象的简单了]

以上为大家介绍了5中绘图方式,后面绘制图片,绘制文字,用的更多的是C路径OC路径一起使用,因为有一些功能,纯OC是无法实现的,所以大家着重练习使用第三种方式。
下面介绍一下绘图属性设置:
首先介绍C路径属性设置


线条属性设置有上面几种,感兴趣的同学可以试试,每个效果是什么样子的。
下面介绍OC路径的属性设置


开始的时候我们就说过,上下文中除了保存路径,还有绘图属性和输出目标,当渲染方法执行的时候,上下文栈会做出什么事情呢?
下面我们就来学习一下上下文栈的原理

写代码验证上面的推理

证明了我们的推理是正确地,上下文栈的原理也是这样子的。
下面给大家介绍常见图形的绘制方法,每种图形用一种方式绘制,感兴趣的同学可以尝试使用另外的方法绘制,熟练掌握几种绘图方法,让大家更深的体会Quartz2D 的绘图步骤
三角形的绘制:纯C语言,直接将路径添加到上下文中

也可以这样写

直角矩形 纯OC方式

圆角矩形,

因为OC路径有直接的类创建方法,使用起来更加方便,所以使用OC的
圆形,有很多方式,修改一下圆角矩形的数据就可以了

弧线的绘制


扇形的绘制 在弧线的基础上添加两条线


给大家介绍了Quartz2D的简单使用,以及简单图形的绘制。希望对大家有帮助
iOS Quartz2D画图的更多相关文章
- iOS开发 - Quartz2D画图
Quartz 2D简单介绍 是一个二维画图引擎,同一时候支持iOS和Mac系统 Quartz 2D能完毕的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...
- 【iOS开发-80】Quartz2D画图简单介绍:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- IOS Quartz2D简介
Quartz2D 简介( 后续会有相关应用) 第一部分 绘制直线 代码示例: - (void)drawRect:(CGRect)rect{ //获取图形上下文 CGContextRef cxConte ...
- iOS——Quartz2D
0. 复习. 1.基本图形绘制 * 线段(线宽.线段样式) * 矩形(空心.实心.颜色) * 三角形.四边形等形状 1> 说明 - (void)drawRect:(CGRect)rect 什么时 ...
- iOS:quartz2D绘图 (动画)
quartz2D可以用来绘制自己需要的图形,它们绘制出来的是一个静态的图形,那么如何绘制一个动态的图形呢?动态的图形就是动画,所谓动画,其实就是很多张图片在短时间内不停的切换所产生的一种视觉效果.qu ...
- iOS CGContextRef画图时的常用方法
UIView的drawRect方法 CoreGraphics绘图 综述:描述系统会调用UIView的drawRect方法,所以coreGraphics的所有实现代码放在该函数内,setNeedsDis ...
- IOS Quartz2D 通过UIColor生成图片
普通生成 示例代码: //这里实现普通生成图片的方法 - (void)drawRect:(CGRect)rect { CGRect cxRect = CGRectMake(, , , ); UIGra ...
- iOS CGContextRef 画图小结
CGContextRef context = UIGraphicsGetCurrentContext(); //设置上下文 //画一条线 CGContextSetStrokeColorWithColo ...
- ios 贝塞尔画图
CGContextRef context = UIGraphicsGetCurrentContext(); //写文字 CGContextSetRGBFillColor(context, 1, 0, ...
随机推荐
- 架构师Jack专访:全面认识软件测试架构师
◇ 测试架构师的职责 测试的职业通道基本是管理线和技术线两条路. 管理线主要的职责:更多是项目管理和资源管理. 技术线主要的职责:更多是技术管理和业务知识. 软件测试架构师更多就是技术线的带头人.管理 ...
- 关于WCF的一些知识点
首先,WCF和WebService一些区别1,WCF支持多中通信协议,http/https tcp/udp/msmq.命名管道,对等网,消息可达性,事物流等.2,WCF可以与ASP.NET集成,共享同 ...
- vue.js源码精析
MVVM大比拼之vue.js源码精析 VUE 源码分析 简介 Vue 是 MVVM 框架中的新贵,如果我没记错的话作者应该毕业不久,现在在google.vue 如作者自己所说,在api设计上受到了很多 ...
- ExtJs之表格控件入门
extjs的表格功能非常强大,包括了排序,缓存,拖动,隐藏某一列,自动显示行号,列汇总,单元格编辑等实用功能.表格由类Ext.grid.GridPanel定义,继承自Panel,其xtype为grid ...
- boost------ref的使用(Boost程序库完全开发指南)读书笔记
STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值语义,算法或函数在内部保修函数对象的拷贝并使用,例如: #include "stdafx.h&quo ...
- Step one : 熟悉Unix/Linux Shell 常见命令行 (二)
2.学会使用一些文本操作命令 sed -- stream editor 1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pat ...
- c#中的对象
字段,属性,方法 对象初始化过程 如果没有继承,顺序如下: 静态变量 静态构造函数 非静态变量 非静态构造函数 如果类有基类,那么基类和子类的初始化顺序如下: 继承类静态成员变量初始化 ...
- IIS配置PHP环境
IIS配置PHP环境(快速最新版)(转载+自创) (参考转载的) 我们知道php配置有几种: 1.CGI方式加载PHP环境,通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使用较少. ...
- FAQ:仓储实现为什么在基础设施层?
FAQ:仓储实现为什么在基础设施层? 目录 问答部分参考文章 问答部分返回目录 问: 仓储实现为什么在基础设施层? 答: 领域模型包含三种元素:实体.值对象和服务,这三种元素都可以以某种形式使用仓储, ...
- 给VIM和Terminal配色:Solarized
给VIM和Terminal配色:Solarized 最近在学习使用VIM.我选择Solarized配色.相信很多人也都在用. 官网地址: http://ethanschoonover.com/sola ...