静态渐变图像与 CAGradientLayer?

Static Gradient Image vs CAGradientLayer?

我需要在应用中显示一些渐变背景,目前我想到了两种选择,一种是使用静态渐变图像,另一种是使用CAGradientLayer,我是难以抉择。

我只需要在渐变中有三个颜色停止点,顶部、中间和底部,所以两种方式都很简单,我主要关心的是渲染速度,下降到 [UIImage imageNamed:@"gradient-image.png"] vs CGGradientLayer。静态图像可以保留在内存中,因此它只加载一次,但是对于不同的屏幕,要么缩放单个图像,要么我必须有不同大小的图像,这会增加应用程序的整体大小。

不知道有没有文章或结论说一下各自的优缺点,通常应该优先选择哪一个?

谢谢!

如果必须缩小图像,会造成大量内存浪费。如果图像的尺寸正好适合屏幕尺寸和屏幕分辨率,则图像和渐变层之间的 运行 应用程序中没有内存差异,因为渐变图层有一个与正确大小的图像大小相同的后备存储。但考虑到可能的分辨率和屏幕尺寸的数量巨大,这是一个非常高的要求,当然它会大大增加应用程序本身的大小 .

出于这些原因,我认为渐变图层更受青睐。给设备 说明 比提供绘图的实际 更好——除非,如你所说,有一个渲染时间问题。

现在,我从未发现梯度层有任何 "speed of rendering" 问题,我认为担心这是一种过早优化的情况。此外,从应用程序加载图像也需要时间。可能出现问题的地方是,如果您这样做是为了形成 table 视图的各个单元格的背景,例如,必须在用户滚动时实时构建每个单元格。但是如果 Instruments 显示图像更好,那么在那种情况下,我会 still 将代码中的渐变绘制成完美尺寸和分辨率的图像,但我会继续内存中的图像并从中构建单元格。