静态渐变图像 vs CAGradientLayer?

3
我需要在应用程序中展示一些渐变背景,目前我有两个选项,一个是使用静态渐变图像,另一个是使用CAGradientLayer,我正在纠结于选择哪种方式。
我只需要在渐变中有三个颜色停靠点,即顶部、中间和底部,所以两种方法都很简单,我的主要关注点是渲染速度,这取决于[UIImage imageNamed:@"gradient-image.png"]与CGGradientLayer。静态图像可以保留在内存中,因此仅需加载一次,但对于不同的屏幕,要么单个图像要缩放,要么必须拥有不同大小的图像,这会增加应用程序的整体大小。
我不知道是否有任何关于每种方法优缺点的文章或结论,通常应该选择哪种?
谢谢!
1个回答

1
如果要缩小图像,会有大量的内存浪费。如果图像恰好适合屏幕大小和屏幕分辨率,那么在运行应用程序时,图像和渐变层之间没有内存差异,因为渐变层具有与正确尺寸的图像相同大小的后备存储器。但考虑到可能的分辨率和屏幕尺寸数量庞大,这是一个非常高的要求,并且当然会大大增加应用程序本身的大小。
出于这些原因,我认为渐变层更加优选。最好给设备绘制的指令而不是提供绘制的实际——除非,正如你所说,存在渲染时间问题。
现在,我从未发现渐变图层的"渲染速度"问题,我认为担心这个问题是过早优化的情况。此外,从应用程序加载图片也需要时间。可能会出现问题的地方是,如果您将其用作表视图单元格的背景,例如,每个单元格必须在用户滚动时实时构建。但是,如果Instruments显示图像更好,那么在这种情况下,我仍然会在代码中绘制渐变,以形成完美大小和分辨率的图像,然后将图像保存在内存中,并从中构建单元格。

考虑一下渐变的呈现方式。如果只是线性渐变,那么使用图像并应用“scaleToFill”将导致渐变看起来与仅在代码中创建它完全相同。如果渐变是像径向这样的形状,则可能会得到椭圆形渐变而不是圆形渐变,但即使如此,“aspectFill”也将产生与为新尺寸绘制它的代码相同的结果。 - Albert Renshaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接