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 c
CGPoint
cp1x, CGFloat cp1y, CGFloat
cp2x, CGFloat
cp2y,
x, CGFloat
y ); // 如下图CGFloat
两个ControlPoint,两个endPoint
void CGContextAddQuadCurveToPoint (
c, CGFloat cpx, CGFloat cpy, CGContextRef
CGFloat
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组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- [HTML5] Accessible Icon Buttons
Icon buttons are very common in web applications, yet they often have accessibility problems. Learn ...
- Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6
3.4.3 使用depends-on 使用depends-on能够强制使一个或多个beans先初始化,之后再对这个bean进行初始化. 多个bean之间用","." ...
- mysql监控管理工具--innotop
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/innotop/innotop-1.9. ...
- Enable SPI 1.0 and 1.1 with device tre overlays on BeagleBone
For most people the above image means absolutely nothing, but for that one guy that has been searchi ...
- 在windows C++中编译并使用Lua脚本
早前就用过LUA ,只是局部的小项目使用,突然兴起想要写一些关于LUA 的 文章,记录曾经学习过的点点滴滴. 这里我使用的是LUA5.2作为 案例 lua做为轻量级脚本语言已经被广泛应用到应用软件以 ...
- 转:ORACLEERP开发基础之EBS开发基础
转自:http://blog.itpub.net/8781091/viewspace-1012244/ [内容导航] 第1页:开发工具安装 第2页:增加数据块 第3页:注册表单FORM 第4页:注册请 ...
- hdu 1587 Flowers
Flowers Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- Container.ItemIndex 获取到行的序号
如果在ASP.NET中应用了Repeater.Gridview,想获取到行的序号,很简单,使用Container.ItemIndex即可.在Gridview中使用<%# Container.Da ...
- MVC中实现部分内容异步加载
MVC中实现部分内容异步加载 action中定义一个得到结果集的方法 public ActionResult GetItemTree(string title, int itemid, int? pa ...
- Candence下对“跨页连接器(off-page connector)”进行批量重命名的方法
parts.ports.alias等等均可以在“属性编辑器(Property Editor)”中进行查看编辑,并通过复制到Excel等表格软件来进行批量修改.之后再粘贴回去的方法进行批量编辑.但是“跨 ...