zoukankan      html  css  js  c++  java
  • iOS 之 绘图简介

          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编程在以后的主流,可以考虑抽空研究下。

  • 相关阅读:
    Java函数式接口与逐步lambda简化
    Java继承知识点总结(基础知识3)
    Java静态工厂方法新建对象
    Java对象与类知识点总结(基础知识2)
    Java多线程并发入门(基础知识)
    Java基本程序设计结构(基础知识1)
    【数据库】JDBC课设(5)将图片以二进制流方法添加进MySQL并查询
    【数据库】JDBC课设(4) DatabaseMetaData 获得数据库信息
    【数据库】JDBC课设(3)TYPE_SCROLL_INSENSITIVE使结果集可以前后滚动
    简单总结.net下几种序列化
  • 原文地址:https://www.cnblogs.com/SimonGao/p/5033892.html
Copyright © 2011-2022 走看看