********************************** 简介 ***************************************

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 ( CGContextRef c, const CGPoint *points, size_t count ); // 传入一个由点组成的数组

void CGContextAddCurveToPoint ( CGContextRef c, CGPoint cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y,CGFloat x, CGFloat y ); // 如下图

        两个ControlPoint,两个endPoint

void CGContextAddQuadCurveToPoint ( CGContextRef c, CGFloat cpx, CGFloat cpy, 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)的更多相关文章

  1. Quartz2D学习笔记

    1.drawRect方法 //1.证明drawRect方法是在viewDidLoad后自动调用的,方便处理View的相关属性 // YQView * view = [[YQView alloc] in ...

  2. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  3. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  4. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  5. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  6. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  7. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  8. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  9. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

随机推荐

  1. 进程控制之waitid函数

    Single UNIX Specification的XSI扩展包括了另一个取进程终止状态的函数--waitid,此函数类似于waitpid,但提供了更多的灵活性. #include <sys/w ...

  2. 快速高效的破解MySQL本地和远程密码

    http://www.kankanews.com/ICkengine/archives/212.shtml 快速的 MySQL 本地和远程密码破解!首先需要对数据库维护人员说明的是,不必紧张,你无需修 ...

  3. eclipse下修改项目名导致tomcat内发布名不一致的解决方法 .

    eclipse下修改项目名导致tomcat内发布名不一致的解决方法 . ------------------------------------------------------- 解决方案: 直接 ...

  4. Socket异步通信学习一

    最近在做一个频谱管理项目,负责通信模块,自己也是小白,重头学起,直至今天通信基本框架已经完成,把自己在学习中的心得与大家分享一下,做一个socket系列的博文,顺便加固一下自己对socket通信的认识 ...

  5. Java基础知识强化之IO流笔记57:数据输入输出流(操作基本数据类型)

    1. 数据输入输出流(操作基本数据类型) (1)数据输入流:DataInputStream DataInputStream(InputStream in) (2)数据输出流:DataOutputStr ...

  6. Clean Code(二):函数

    笔记2:函数1.短小.还要更短小    每个函数都一目了然,每个函数灰依序把你带到下一个函数    if.else.while语句等,其中的代码块应该只有一行,块内调用的函数名称应该较具有说明性2.只 ...

  7. Python模拟键盘输入和鼠标操作

    Python模拟键盘输入和鼠标操作 一.Python键盘输入模拟: import win32api import win32con win32api.keybd_event(17,0,0,0)  #c ...

  8. Unity3D 之UGUI 滑动条(Slider)

    这里来讲解下UGUI 滑动条(Slider)的用法 控件下面有三个游戏对象 Background -->背景 Fill Area --> 前景区域 Handle Slide Area -- ...

  9. readonly和const区别

    常量和只读变量的区别 const string name="Xuj"; readonly string name; 1.常量是不可改变的,只读变量只能在构造方法中才能改变其值. 2 ...

  10. DevExpres表格控件运行时动态设置表格列

    本文是系列文章,陆续发表于电脑编程技巧与维护杂志. DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友.金蝶.神州数码.工信部.中国石化.汉王科技等众多大中型科技型企业 ...