Quartz2D学习笔记(1)
********************************** 简介 ***************************************
Quartz2D是⼀个二维绘图引擎,同时支持iOS和Mac系统。
Quartz2D能完成的工作:
绘制图形 : 线条\三角形\矩形\圆\弧等
绘制文字
绘制\生成图片(图像)
读取\生成PDF
截图\裁剪图片
自定义UI控件:事实上iOS中⼤部分控件的内容都是通过Quartz2D画出来的。
****************************** 常用属性及函数 ***********************************
CGContextRef GraphicsContext
作用:
保存绘图信息,绘图状态
决定绘制的输出目标(比如输出到PDF,显示器的窗口,打印机)

如何利用Quartz2D绘图到view上?
1. 首先要有Graphics Context,它保存绘图信息,并且决定将图绘制到什么地方。
2. Graphics Context要与view相关联,才能将内容绘制到view上。
执行步骤
1. 建立一个继承UIView的类
2. 实现 -(void) drawRect:(CGRect)rect 方法(此方法才能得到与view相关的GraphicsContext):
1)取得跟当前view相关联的GraphicsContext
2)绘制图形
3)利用GraphicsCotext将绘制内容渲染显示到view上
Quartz2D的API来自于 Core Graphics 框架,是纯C语言的,因此Quartz2D的API基本都以CG为前缀。
view内部有个layer属性,view之所以能显示东西,是因为layer,所以drawRect:取得的其实是Layer Graphics Context。
******************************* 实现简单绘图 *********************************
画直线
// drawRect:方法在自定义view第一次显示在屏幕上或者view内容需要更新时就会被调用
-(void)drawRect:(CGRect) rect{
CGContextRef ctxt = UIGraphicsGetCurrentContext;
/* 在drawRect:里调用UIGraphicsGetCurrentContext方法获得的就是view的Graphics Context */
// 绘制一条直线
CGContextMoveToPoint(ctxt, , ); // 设置起点
CGContextAddLineToPoint(ctxt,,); // 设置终点
CGContextSetRGBStrokeColor(ctxt, , , 1.0); // 设置线条颜色
// 设置颜色也可以用: [[UIColor GreenColor] set];
CGContextSetLineWidth(ctxt, ); // 设置线条宽度
CGContextStrokePath(ctxt); // 渲染出一条空心的线
/* 渲染为实心:CGContextStrokePath(CGContextRef Context)
线条不能渲染成实心的 */ /* [[UIColor purpleColor] setFill] 同时设置实心和颜色*/ */ [[UIColor blueColor] setStroke]; 同时设置空心和颜色*/
关于此段代码用到的表示颜色的函数:
void CGContextSetRGBStrokeColor ( CGContextRef c, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha );
类似的还有:
void CGContextAddLines ( , const CGPoint *points, size_t count ); // 传入一个由点组成的数组 CGContextRef c
void CGContextAddCurveToPoint ( , CGContextRef cCGPoint cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, x, CGFloat y ); // 如下图CGFloat
两个ControlPoint,两个endPoint
void CGContextAddQuadCurveToPoint ( c, CGFloat cpx, CGFloat cpy, CGContextRefCGFloat x, CGFloat y ); // 如下图
一个ControlPoint,一个endPoint
// 绘制三角形
-(void)drawRect:(CGRect)rect{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, , );
CGContextMoveToPoint(context, , );
CGContextAddLineToPoint(context, , );
CGContextClosePath(context); /* 要得到一个封闭图形,就要用CGContextClosePath方法,此方法将起点和终点连接起来 */
CGContextStrokePath(context); // 渲染图形到layer上显示
}
Quartz2D学习笔记(1)的更多相关文章
- Quartz2D学习笔记
1.drawRect方法 //1.证明drawRect方法是在viewDidLoad后自动调用的,方便处理View的相关属性 // YQView * view = [[YQView alloc] in ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- 【03】尽可能使用const
1.为什么搞出const关键字? const指定一个语义约束,指定一个对象不可修改.如果一个对象不可修改,就应该说出来. 2.const与指针 const可以修饰指向之物,也可以修改指针本身.STL中 ...
- 成员方法的this指针
1.我们知道成员方法中,有个隐式的this常量指针.考虑,Derived继承的成员方法中this指针的表面类型是什么?子类重写的虚方法中this指针的表面类型是什么? 2.Derived继承的方法,就 ...
- Free and Open Source Load-Balancing Software and Projects--转
http://www.inlab.de/articles/free-and-open-source-load-balancing-software-and-projects.html This ove ...
- 如何从零开始学习DIV+CSS
CSS是样式,DIV是层.DIV+CSS是网站标准(web标准),通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别.因为XHTML网站设计标准中,不再使用表格定位技术,而是采用D ...
- 玩转Android之二维码生成与识别
二维码,我们也称作QRCode,QR表示quick response即快速响应,在很多App中我们都能见到二维码的身影,最常见的莫过于微信了.那么今天我们就来看看怎么样在我们自己的App中集成二维码的 ...
- 1.shell之搭建Shell编程环境
第一次写博客,加点废话,学习linux有一段时间,随着学习的深入发现自己学的不够系统,特别是遇到一些莫名的问题时,我只有各种百度,运气好时能解决掉,差时到现在还没解决,就算解决了还是不清楚是怎么解决的 ...
- java.util.Stack类简介
Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来 Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用 ...
- Java并发——线程安全、线程同步、线程通信
线程安全 进程间"共享"对象 多个“写”线程同时访问对象. 例:Timer实例的num成员,即add()方法是用的次数.即Timer实例是资源对象. class TestSync ...
- Python之路【第二十四篇】:Python学习路径及练手项目合集
Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...
- initMethod 和 afterPropertiesSet 以及 AwareMethod方法的执行时机
在spring开发中,我们定义bean 经常会需要用到beanFactory对象,这就需要实现BeanFactoryAware这种类型的接口,它有一个setBeanFactory方法 在xml中配 ...