iOS 实现图形编程主要有三种技术:UIKit、Core Graphics、OpenGL。

  绘图需要在图形环境中进行,图形环境分为三种:屏幕图形环境、off screen 位图环境和PDF图形环境。在屏幕环境中绘图是在一个UIView或其子类中进行,并显示到屏幕上。其它两种不能直接显示到屏幕。

1. UIKit

1.1. 概念描述

  一套 OC 提供的绘图API,用于进行基本的2D绘图、图像处理和动画处理。

 

1.2. 功能类

1.2.1. UIBezierPath:线、角度、椭圆

1.2.2. UIImage:图像

1.2.3. UIColor:颜色

1.2.4. UIFont:字体

1.2.5. UIScreen:屏幕信息

1.3. 图形环境

  获取当前图像环境接口:UIGraphicsGetCurrentContext 。

2. Core Graphics

  Quartz 2D 是 Core Graphics 中的2D绘图引擎。

  Core Graphics 是一套支持向量图形,路径,梯度绘制的C语言接口。

  看来,Core Graphics是一套自定义控件很好的API,灵活性很强。也就是说,Quartz 2D是绘制平面图很好的工具。

  那么,我们再来看看Quartz 2D还能干什么? 资源和设备无关、路径绘制、 antialiased呈现、梯度填充、图像、透明绘制和透明层、遮蔽和阴影、颜色管理、坐标转换、字体、离屏呈现(OffScreen);可以与所有的图形和动画技术一起使用;paint模式绘制;可以把图形环境作为一个绘制目标;绘制图像设备无关。

  看完之后,感觉特别强大,好像到了几乎无所不能的地步。

  

  参考博客:来自 文顶顶,前因后果交代得非常清楚,我都想放弃自己写这方面的博客了

2.1. Quartz 的图形环境

  Quartz 也有几种图形环境。

2.1.1. 位图图形环境

  用来创建一个位图,使用函数CGBitmapContextCreate来创建。

2.1.2. PDF图形环境

  这个用不着,就不用研究了。

2.1.3. 窗口图形环境

  在一个窗口上进行绘制。

2.1.4. 层环境(CGLayer)

  与另一个图形环境关联的 offscreen绘制目标。

  使用层环境的目的是为了优化绘制层到创建它的图形环境的性能。层环境能够比位图图形环境提供更好的offscreen绘制性能。

2.2. Quartz 功能类

  • CGContext:表示一个图形环境;
  • CGPath:使用向量图形来创建路径,并能够填充和stroke;
  • CGImage:用来表示位图;
  • CGLayer:用来表示一个能够用于重复绘制和offscreen绘制的绘制层;
  • CGPattern:用来表示Pattern,用于重复绘制;
  • CGShading和 CGGradient:用于绘制梯度;
  • CGColor 和 CGColorSpace;用来进行颜色和颜色空间管理;
  • CGFont, 用于绘制文本;

3. OpenGL

  调用底层图形硬件的C图形库,可以绘制2D和3D数据。由于苹果现在比较排斥OpenGL,在iOS里OpenGL会越来越不重要,所以也不进行讨论了。

4. 其它图形编程技术

4.1. Core Animation

  Core Animation不属于绘制系统,它持有一个layer对应,捕获View内容为位图,并通过硬件复合,操作View的内容。然而,Core Animation也可以创建独立的层到一个层关系树中,显示视图不支持的显示内容。

4.1.1. Core Animation 功能类

  抽象类:

  • CAAnimation是一个抽象公共基类,CAAnimation采用CAMediaTiming 和CAAction协议为动画提供时间(如周期、速度、重复次数等)和action行为(启动、停止等)。
  • CAPropertyAnimation是  CAAnimation的抽象子类,为动画提供一个由一个key路径规定的层属性的支持;

  功能类:

  • CATransition是CAAnimation的具体子类,提供影响整个层内容的事物效果。
  • CAAnimationGroup也是CAAnimation的子类,允许动画对象组合到一起并同时运行。
  • CABasicAnimation 是CAPropertyAnimation的具体子类,为一个层属性提供简单插入能力。
  • CAKeyframeAnimation也是CAPropertyAnimation的具体子类,提供key帧动画支持。

4.2. Image I/O

  图形文件读写接口。

4.3. Sprite Kit

  基于OpenGL ES的库,同样不再讨论。

4.4. SceneKit

  OC 3D框架,用于游戏和界面丰富的用户UI。包含一个高性能的呈现引擎和一个高级的描述性API,使用SceneKit仅需要使用描述性API描述你的场景的内容(如几何形状、材料、灯光和摄像等)和你想在那些内容上要执行的行动或动画即可。

4.5. Metal

  基于GPU的3D编程。这是iOS 3D编程在以后的主流,可以考虑抽空研究下。

iOS 之 绘图简介的更多相关文章

  1. iOS系统版本简介

    iOS系统版本简介 ⽬目前iOS设备所⽀支持的最主流操作系统是iOS6,⼤大概占了93%,⽽而使 ⽤用iOS5的iOS设备⼤大概占6%,剩下的只有1%.( 根据苹果的官⽅方数据 ) 从iOS1到现在的 ...

  2. IOS NSInvocation用法简介

    IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...

  3. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  4. 【iOS开发-80】Quartz2D绘图简介:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState

    本文转载至 http://blog.csdn.net/weisubao/article/details/41282457 - (void)drawRect:(CGRect)rect { //获得当前上 ...

  5. iOS 2D绘图 (Quartz 2D) 概述

    本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=list 由于自己的项目需要,从网络上下载了许多关于绘制图形的demo,只是用在自己的项目中,很多地方 ...

  6. iOS 2D绘图详解(Quartz 2D)之概述

    前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView,虽然对CALayer及其子类很熟练,但是对Quartz 2D这个强大的框架仍然概念模棱两可.于是,决定学习下,暂定7篇文 ...

  7. iOS开发--绘图教程

    本文是<Programming iOS5>中Drawing一章的翻译,考虑到主题完整性,翻译版本中加入了一些书中未涉及到的内容.希望本文能够对你有所帮助. 本文由海水的味道翻译整理,转载请 ...

  8. iOS:绘图(18-01-25更)

    目录 1.UIBezierPath(贝塞尔曲线) 1).在重写 drawRect: 方法里使用 2).在普通方法里使用,需要画布. 3). 切圆角.指定位置圆角.任意形状. 4).彩色的动画加载圆圈. ...

  9. iOS开发 绘图详解

    Quartz概述 Quartz是Mac OS X的Darwin核心之上的绘图层,有时候也认为是CoreGraphics.共有两种部分组成   Quartz Compositor,合成视窗系统,管理和合 ...

随机推荐

  1. 服务器遭受 ssh 攻击

    查看auth.log日志,差点吓一跳,好多攻击记录. vim  /var/log/auth.log 才两天的功夫,900多万条记录, 一些解决应对的办法: 43down voteaccepted It ...

  2. NOI2004 郁闷的出纳员 Splay

    郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...

  3. init.rc语法介绍

    1.init.rc是一个可配置的初始化文件,通常定制厂商可以配置额外的初始化配置,init.%PRODUCT%.rc 2.init.rc是在$GINGERBREAD/system/core/init/ ...

  4. The 2014 ACM-ICPC Asia Regional Anshan

    继续复盘下一场Regional! [A]-_-/// [B]模拟(之前每次遇到模拟.暴搜都直接跳了,题目太长也是一个原因...下次是在不行可以尝试一下) [C]数论 互质.容斥? [D]数学推导(方差 ...

  5. Sping--AOP--Annotation

    Aspectj 概念: 1. joinpoint:切入点, 比如@Before, @After, @Around 2. Pointcut:切入点集合, 比如 @Pointcut("execu ...

  6. hibernate--coreapi--configuration sessionfactory--getcurrentsession--opensession

    sessionfactory的目的:产生session,维护数据库连接池 测试文件里的sessionfactory创建数据库连接,所以sessionFactory通过配置文件里的配置信息产生一个数据库 ...

  7. HTML5 Canvas | w3cschool菜鸟教程

    HTML5 Canvas <canvas> 标签定义图形,比如图表和其他图像,您必须使用脚本来绘制图形.. 在画布上(Canvas)画一个红色矩形,梯度矩形,彩色矩形,和一些彩色的文字. ...

  8. openstack controller ha测试环境搭建记录(十二)——配置neutron(计算节点)

    在计算节点配置内核参数:vi /etc/sysctl.confnet.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0 在计算节点使 ...

  9. JavaScript------for-in的使用方法

    1.在数组中使用 var str = ["a", "b", "c"]; for (var item in str) { //alert(it ...

  10. Linux中cat、more、less、tail、head命令的区别

    一.cat 显示文件连接文件内容的工具 cat 是一个文本文件(查看)和(连接)工具,通常与more搭配使用,与more不同的是cat可以合并文件.查看一个文件的内容,用cat比较简单,就是cat后面 ...