【问题标题】:Images vs. Core Graphics图像与核心图形
【发布时间】:2011-06-29 12:02:46
【问题描述】:

在 iOS 设备上,在哪些情况下使用 Core Graphics 绘制图形比使用图像文件更好?

这样做在资源方面有什么好处?

【问题讨论】:

    标签: iphone core-graphics


    【解决方案1】:

    图像与核心图形是直接的区别。渲染离屏/在屏图形的方法更加复杂,以至于您需要使用 Instruments 来找出真正发生的事情。我试图在这里提供一个概述,但这个答案可能需要更多知识渊博的人进行一些改进。

    GPU 与 CPU 渲染

    图形始终由 GPU 在屏幕上呈现。但是,它们可以由 GPU 或 CPU 生成,并发生在用户代码或称为“渲染服务器”的单独进程中。这是一个概述:

    CPU,用户代码:

    • 核心图形和核心文本
    • drawRect()。结果通常被缓存。

    GPU,渲染服务器:

    • 带有shouldRasterize 的CALayer 设置为YES。这会创建图层和子图层的缓存。

    GPU,渲染服务器,很慢:

    • 使用遮罩 (setMasksToBounds) 和动态阴影 (setShadow*) 的 CALayer。
    • 组不透明度 (UIViewGroupOpacity)。

    GPU,快速:

    • 从 PNG 文件创建图像。可拉伸图像的拉伸也只是 GPU。

    请注意,缓存仅在缓存被重复使用时才有用。如果立即丢弃它会损害性能。例如,一个内容被简单拉伸的缓存动画可以被缓存和重用,但是一个内容改变的缓存动画的性能会很糟糕。

    位图与绘图

    图像文件通常更快。

    • 可以使用aggressive caching提前将图像文件下载到磁盘。
    • 可以在后台从磁盘读取和解压缩图像。
    • 如果您使用imageNamed: 而不是initWithData:,图像可以缓存在内存中。

    离屏绘图需要更多的工作,但可以让您实现更多。

    • 您可以在不损失质量的情况下制作复杂图形的动画,因为图形在每一帧上都被重写。
    • 您可以使用 i18n 即时创建图形。
    • 如果不需要,应禁用隐式 Core Graphics 动画。示例:带有圆角的 UIView(您只需要圆角,而不是动画)。
    • 绘图可能非常复杂,以至于您需要使用 Instruments 来查看时间的去向。
    • 除非您使用遮罩、阴影、边缘抗锯齿或组不透明度,否则使用 drawRect 绘图可能会被缓存。您可以请求缓存调用-[CALayer setShouldRasterize:YES]-[CALayer setRasterizationScale:]

    可拉伸图像,无论是从图像文件中读取,还是通过绘图生成,都使用较少的内存。拉伸对 GPU 来说是一项不昂贵的操作。


    只有在不够的情况下,性能才是问题。除非另有说明,否则请使用更快的编码方式。最快的程序是最先进入市场的程序。

    一些有趣的阅读:

    【讨论】:

    • +1 表示“最快的程序是最先进入市场的程序”。伟大的报价!永远不要过早优化。
    • 应该Rasterize 是巨大的!谢谢!
    • 我已经修复了一些链接,但我不知道如何修复 [4](第 240 节)和 [7](第 238 节)可能已被 Apple 未发布以支持更新的链接视频/会议。
    【解决方案2】:

    根据我的经验,从性能的角度来看,使用图像总是更好,但有时您需要手动绘制。

    【讨论】:

      【解决方案3】:

      我认为,图像的性能更好。但是,当我们想要开发可以改变(例如颜色变化、形状变化等)、缩放或动画的东西时,我们应该选择核心图形。

      当我们想用一些数学逻辑绘制一些东西并想用它来玩时,核心图形是惊人的!在学校里,我们都学习数学中的圆方程、线方程等。核心图形是可视化我们的数学知识并用它构建一些更疯狂的东西的正确工具!

      核心图形对于模拟类型的应用程序也非常有用。

      【讨论】:

      • 一些示例和基准可以为您的答案增添趣味!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      相关资源
      最近更新 更多