在iOS设备上,使用Core Graphics绘制图形比使用图像文件更好?
在资源方面这样做有什么好处?
答案 0 :(得分:33)
图像与核心图形是一个直接的区别。渲染屏幕外/屏幕图形的方法更加复杂,需要使用Instruments来找出真正发生的事情。我试着在这里提供一个概述,但是这个答案可以从更有知识的人那里得到一些改进。
GPU总是在屏幕上呈现图形。但是,它们可以由GPU或CPU生成,并且发生在用户代码中或称为“渲染服务器”的单独进程中。以下是概述:
CPU,用户代码:
drawRect()
。结果通常是缓存的。GPU,渲染服务器:
shouldRasterize
设置为YES的CALayer。这将创建图层和子图层的缓存。GPU,渲染服务器,非常慢:
setMasksToBounds
)和动态阴影(setShadow*
)。UIViewGroupOpacity
)。 GPU,快:
请注意,缓存仅在重用缓存时才有用。如果立即丢弃它会伤害性能。例如,可以缓存和重用内容被简单拉伸的缓存动画,但是内容更改的缓存动画将具有可怕的性能。
图像文件通常更快。
imageNamed:
代替initWithData:
。离线绘图需要更多工作,但可以让您获得更多。
-[CALayer setShouldRasterize:YES]
和-[CALayer setRasterizationScale:]
。可拉伸图像,无论是从图像文件读取还是通过绘图生成,都使用较少的内存。拉伸是对GPU的一种不昂贵的操作。
如果没有足够的性能,性能只是一个问题。除非另有说明,否则请使用速度更快的代码。最快的计划是首先进入市场的计划。
一些有趣的读物:
答案 1 :(得分:2)
根据我的经验,从性能的角度来看,使用图像总是更好,但有时你需要手动绘制图像。
答案 2 :(得分:0)
我认为图像的性能更好。但是,当我们要开发可以更改(例如颜色更改,形状更改等),缩放或可以进行动画处理的东西时,我们应该选择核心图形。
当我们想用一些数学逻辑来绘制某些东西并想玩这些东西时,核心图形就很棒了!在学校里,我们都在数学上学习圆方程,线方程等。核心图形是可视化我们的数学知识并以此构建更多疯狂事物的正确工具!
核心图形对于模拟类型的应用程序也非常有用。