Hen*_*oke 5 iphone drawing core-animation core-graphics
我有一个应用程序,我正在做一些自定义绘图,渐变背景上的一堆线,就像这样(忽略文本,它们只是UILabels):
http://prehensile.co.uk/outgoing/Screenshot2010-06-09at12.22.32.png
目前,这一切都是通过启动一个新的CGContext,使用CGContextDrawLinearGradient和CGContextStrokePath将内容绘制到其中,最后使用UIGraphicsGetImageFromCurrentImageContext保存结果图像完成的.在我布置那些标签的同时计算定位信息,所以当使用drawRect绘制包含UIView时,它是一个PITA(并且重复工作)再次计算它,所以我在它之前绘制它进入UIImage的时间.一切正常,到目前为止一切顺利.
但是,我有一种潜在的怀疑,即使用CALayers进行此绘图可能更有效.我(粗略)理解这两种方法之间的区别在于CALayer更像是一堆绘制内容的指令,因此在实际绘制在屏幕上之前占用的内存较少,而提前将所有内容绘制到UIImage意味着无论是否绘制,你都会在内存中一直有一个很好的位图.
这是正确的理解吗?什么通常被认为是在iPhone上绘制自定义图像的最佳方式?
答案很晚了,但也许会有用。
CA 是比 CG 更高的抽象层,因此您在 CA 中所做的几乎所有事情最终都会在 CG 中实现,但有一些优点,即处理将在渲染时进行并节省内存。
对于您绘制的路径,您可以使用 CAShapeLayer 并在进行布局时设置路径和描边颜色。每个 CAShapeLayer 都有自己的描边样式,因此,由于看起来您正在使用一些白线和多种黑色粗细,因此每种不同的线条样式都需要一个单独的 CAShapeLayer。
对于线性渐变,您可以制作 1x50 图像,并让 CALayer 在渲染时将其拉伸到所需的宽度。将 CALayer 的内容设置为 CGImageRef 以及拉伸内容的模式。
CALayers 对于内存占用来说是一个明显的胜利;处理时间从来都不是显而易见的;预渲染图像可能仍然会获胜。
| 归档时间: |
|
| 查看次数: |
1939 次 |
| 最近记录: |