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组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- FZOJ2110 star(DFS)
Overpower often go to the playground with classmates. They play and chat on the playground. One day, ...
- UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)
Meta-Loopless Sorts Background Sorting holds an important place in computer science. Analyzing and ...
- Sql Server2005 Transact-SQL 窗口函数(OVER)
1.简介: SQL Server 2005中的窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地累计总数.移动平均值.以及执行其它计算.窗口函数功能非常强大,使用起来也十分容易.可以使用这个技 ...
- Android SDK Manager无法更新问题解决
有时候在网络不好的情况下,android sdk manager更新可能一直报错.原因跟国内对于google相关服务的访问受限有关系,需要设置代理访问. 最近也遇到了这个问题.解决方法如下. 启动An ...
- Android用悬浮按钮实现翻页效果
今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子. 首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams.那么在An ...
- careercup-数学与概率 7.5
7.5 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分.假定正方形的上下两条边与x轴平行. 解法: 要将两个正方形对半分,这条线必须连接两个正方形的中心点.利用slope=(y1 ...
- 可拖拽重排的CollectionView
来源:wazrx 链接:http://www.jianshu.com/p/8f0153ce17f9 写在前面 这段时间都在忙新项目的事儿,没有时间倒腾,这两天闲下来,想着一直没有细细的研究Collec ...
- MyJFrame(文本)界面的建立
import java.awt.Color;import java.awt.Component;import java.awt.Container;import java.awt.FlowLayout ...
- java 四种逻辑运算符
在java的逻辑运算符中,有这么四类&&(短路与).&(与).||(短路或).|(非短路或) &&和&都表示与,&&表示第一个条件为fa ...
- day-5
/* 还有几半天了 上午考试暴力暴力暴力... 亏我还写了对拍 没有卵用 T2 差点事 T3不难却没咋么认真想 这tm就很尴尬了23333 下午整理题 一下午.... 晚上打月赛 + 单调队列 继续说 ...