【发布时间】:2011-06-29 12:02:46
【问题描述】:
在 iOS 设备上,在哪些情况下使用 Core Graphics 绘制图形比使用图像文件更好?
这样做在资源方面有什么好处?
【问题讨论】:
标签: iphone core-graphics
在 iOS 设备上,在哪些情况下使用 Core Graphics 绘制图形比使用图像文件更好?
这样做在资源方面有什么好处?
【问题讨论】:
标签: iphone core-graphics
图像与核心图形是直接的区别。渲染离屏/在屏图形的方法更加复杂,以至于您需要使用 Instruments 来找出真正发生的事情。我试图在这里提供一个概述,但这个答案可能需要更多知识渊博的人进行一些改进。
图形始终由 GPU 在屏幕上呈现。但是,它们可以由 GPU 或 CPU 生成,并发生在用户代码或称为“渲染服务器”的单独进程中。这是一个概述:
CPU,用户代码:
drawRect()。结果通常被缓存。GPU,渲染服务器:
shouldRasterize 的CALayer 设置为YES。这会创建图层和子图层的缓存。GPU,渲染服务器,很慢:
setMasksToBounds) 和动态阴影 (setShadow*) 的 CALayer。UIViewGroupOpacity)。 GPU,快速:
请注意,缓存仅在缓存被重复使用时才有用。如果立即丢弃它会损害性能。例如,一个内容被简单拉伸的缓存动画可以被缓存和重用,但是一个内容改变的缓存动画的性能会很糟糕。
图像文件通常更快。
imageNamed: 而不是initWithData:,图像可以缓存在内存中。离屏绘图需要更多的工作,但可以让您实现更多。
-[CALayer setShouldRasterize:YES] 和-[CALayer setRasterizationScale:]。可拉伸图像,无论是从图像文件中读取,还是通过绘图生成,都使用较少的内存。拉伸对 GPU 来说是一项不昂贵的操作。
只有在不够的情况下,性能才是问题。除非另有说明,否则请使用更快的编码方式。最快的程序是最先进入市场的程序。
一些有趣的阅读:
【讨论】:
根据我的经验,从性能的角度来看,使用图像总是更好,但有时您需要手动绘制。
【讨论】:
我认为,图像的性能更好。但是,当我们想要开发可以改变(例如颜色变化、形状变化等)、缩放或动画的东西时,我们应该选择核心图形。
当我们想用一些数学逻辑绘制一些东西并想用它来玩时,核心图形是惊人的!在学校里,我们都学习数学中的圆方程、线方程等。核心图形是可视化我们的数学知识并用它构建一些更疯狂的东西的正确工具!
核心图形对于模拟类型的应用程序也非常有用。
【讨论】: