iOS Graphics 图形框架

ARKit

Integrate iOS device camera and motion features to produce augmented reality experiences in your app or game.

功能

可以用来构建 AR 应用。

ARKit

Core Animation

Render, compose, and animate visual elements.

Core Animation

功能

Core Animation是真正的渲染层, 每一个 UIView 都有一个对应的 CALayer 负责具体的渲染。CALayer 的 contents 保存图层要显示的内容, 可以通过设置 CGImage, 实现 CALayerDelegate displayLayer 方法或者自定义绘图 drawRect 方法。UIKit控件内部也是使用这些方法实现。CALayer中的属性基本上都是在 GPU 上绘制。

Core Animation 提供一系列其他 Layer 实现特定的功能, 比如 CAShapeLayer, CATextLayer 等。

图形层级结构的管理

提供添加, 插入和删除子图层的方法用来管理视图层级结构。UIKit 图形层级相关的方法也是基于 Core Animation。

动画执行

提供 CAAnimation 相关的一系列类, 可以实现各种动画效果。

负责具体的渲染调度工作
  1. 视图布局计算。
  2. 文本渲染, 还有自定义 drawRect, 都会绘制成 Bitmap。
  3. 图片解压缩处理, 图片传到 GPU 处理之前, 需要解压缩为位图。
  4. 通过 Metal 或者 OpenGL 调度 GPU 进行最后的渲染, 显示到屏幕上。

Core Animation Programming Guide

Core Graphics

Harness the power of Quartz technology to perform lightweight 2D rendering with high-fidelity output. Handle path-based drawing, antialiased rendering, gradients, images, color management, PDF documents, and more.

功能

运行时 2D 图形的绘制

基于 Quartz 绘图引擎实现, 主要用于运行时 2D 图形绘制。包括三角, 矩形, path等图形和 shadow, mask, color, transform 的绘制。常用于自定义 drawRect 方法内绘制, 异步绘制 Bitmap。Core Graphics 在 CPU上绘制出Bitmap, 交由 GPU 进行最终合成。

比如一个 layer 视图层级比较复杂, 而 subLayer 不需要处理触摸相关的事件, 可以直接把整个 layer 绘制成一张图片, 提交性能, 减低内存。

比如设置 layer.shouldRasterize = true 会进行光栅化处理, 就是由 Core Graphics 在 CPU 上绘制 shadow, mask, border 等属性, 并且将整个layer层级绘制成一个Bitmap, 减轻GPU的压力。

Quartz 2D Programming Guide

Core Image

Use built-in or custom filters to process still and video images.

功能

图像滤镜处理
滤镜
  • 对静态图片进行滤镜处理, 比如常见的照片滤镜效果。
  • 支持多种滤镜组合操作, 滤镜链会自动组合成一次操作, 提高性能。
  • 配合使用 AVFoundation 对视频进行滤镜处理。
  • 可以使用 Metal 或者 OpenGL 进行实时渲染。
  • 使用 Metal 创建自定义滤镜。
  • Core Image 支持 GPU 和 CPU 两种渲染方式, GPU 渲染性能更好。Core Image 优先使用 Metal 进行渲染处理, 不支持 Metal 的设备使用 OpenGL 处理。当使用CPU 渲染的时候选择 Core Graphics 进行处理。
图像特征检测

提供人脸, 二维码, 文字, 矩形, 条码检测功能。例如使用人脸检测, 可以检测出人脸眼睛, 鼻子等位置, 可以做一些简单的贴纸效果。 iOS 11 开始, 图像检测功能基于 Vision 框架实现。


Detect

Core Image Programming Guide
Core Image

Image I/O

Read and write most image file formats. Manage color and access image metadata.

功能

主要用于图片的处理, 比如图片解压缓存, 获取图片属性, 图片尺寸缩放, 图片逐步加载, 生成新的图片。
  • 最初是 Core Graphics 的一部分, 现在上层 UIKit,Core Image,Core Graphics 中的 CGImage 处理,都是依赖 Image/IO 库。
  • 网络图片处理库可以使用基于 Image I/O 异步解码缩放下载图片为 UIImageView 的尺寸, 可以节省内存, 减少 CPU 解压时间, 避免主主线程卡顿。
  • 可以用于渐进式图片的加载。

Image I/O Programming Guide

Metal

Render advanced 3D graphics and perform data-parallel computations using graphics processors.

功能

Metal 是用来取代 OpenGL 进行底层渲染的库, 相比 OpenGL有更好的性能, 但是不能跨平台, 只能使用在 iOS 上。Core Image, SpriteKit 和 SceneKit也是基于 Metal 构建。

图形绘制

用于各种图形的绘制, 包括 3D 场景的绘制。

并行计算

在 GPU 上进行并行计算, 因为 GPU 更适合大规模并行计算, 浮点计算性能更好。

Metal Programming Guide

Metal Performance Shaders

Optimize graphics and compute performance with kernels that are fine-tuned for the unique characteristics of each Metal GPU family.

功能

图像过滤

Core Image 也支持由 Metal 编写的自定义滤镜, 直接使用 Metal 滤镜处理性更好, 但是差距应该很小, 毕竟 Core Image 底层也是基于 Metal 进行实现。

神经网络

实现并运行神经网络, 用于机器学习。

计算矩阵向量

分解矩阵, 向量, 求解方程式 和矩阵乘法。

光线追踪

Metal Performance Shaders

提示: Metal 相关的库都是基于 GPU 计算

MetalKit

Build Metal apps quicker and easier, using far less code. Render graphics in a standard Metal view, load textures from many sources, and work efficiently with models provided by Model I/O.

功能

MTKView

MTKView 类用来显示 Metal 内容, 因为 MTKView 是 UIView 的子类, 可以方便的添加到 UIView视图层级中, 方便使用。

模型处理

可以将 Model / IO 库的 3D 模型加入到 Metal 内容中进行显示。

MetalKit

SceneKit

Create 3D games and add 3D content to apps using high-level scene descriptions. Easily add animations, physics simulation, particle effects, and realistic physically based rendering.

功能

主要用于制作 3D 游戏和 3D 模型渲染, 基于 Metal 进行渲染。

SpriteKit

Create 2D sprite-based games using an optimized animation system, physics simulation, and event-handling support.

功能

主要用于制作 2D 游戏, 基于 Metal 进行渲染。

Model I/O

Import, export, and manipulate 3D models using a common infrastructure that integrates MetalKit, GLKit, and SceneKit.

功能

用来操作 3D 模型。

Vision

Apply computer vision algorithms to perform a variety of tasks on input images and video.

功能

静态图像分析

检测人脸, 条码, 矩形等功能。和 Core Image 类似, Vision 相对 Core Image 检测返回的信息更多。

对象追踪

可以用来对视频或者相机的每一帧进行图像分析。

机器学习图像分析
  • 使用 Vision 框架预处理照片,并使用 Core ML 模型对照片进行分类。
  • 使用 Core ML 模型识别照片或者视频中物体。

根据个人测试,Vision人脸识别速度比较慢,跟Face++这种SDK差不多10倍的差距。

Core Text

Create text layouts using high-quality typesetting, character-to-glyph conversion, and positioning of glyphs in lines and paragraphs. Optimize font handling with automatic font substitution, and get easy access to font metrics and glyph data.

Text Framework

功能

主要用于文本排版和绘制
  • UILabel , UITextField , UITextView 底层基于 Text Kit 绘制, Text Kit 基于 Core Text 实现。
  • 使用 UIKit 文本控件时, Core Animation 负责调用文本渲染, Core Text 与 Core Graphics 协作, 将文本绘制为 texture 保存在 CABackingStore里, CABackingStore 保存在 CALayer 的 contents 中用于界面渲染。
  • UIKit 文本控件默认在主线程进行文本绘制, 可以使用 Core Text 进行异步绘制, 降低主线程的消耗, 提高性能。
  • TextKit 与 CoreText 几乎相同的性能和功能, 同样支持异步绘制, 并且更容易使用, 可以优先选择 TextKit。

Core Text Programming Guide
Text Programming Guide for iOS

ReplayKit

功能

可以用于录制屏幕画面, 实时推送到第三方直播服务器, 可以实现直播流录制上传的功能。

PDFKit

功能

显示和操作 PDF 文档。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,548评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,069评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,985评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,305评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,324评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,030评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,639评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,552评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,081评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,194评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,327评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,004评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,688评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,188评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,307评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,667评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,337评论 2 358

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,983评论 3 119
  • 今天是星期天,我还没吃饭。我的表弟就来了。 我先吃饭,然后做作业,接着又给表弟出了几道10以内的加减...
    快乐童年Lin阅读 164评论 0 0
  • 摘要:某来访者,男性,大一数学性本科,来访者由于对事情的认知问题导致内心焦虑,宿舍关系紧张,无法专心听课,社会功能...
    王斐007阅读 7,088评论 4 2
  • 今天注销了一张银行卡,还一张明天注销去 晚上打游戏心态又不好了,要改 学习学习 努力一等奖学金
    李君不是不靠谱阅读 145评论 0 0