iOS - 这是放置图像的更好选择?核心图形(PaintCode应用程序)vs图像文件(png)

时间:2016-02-12 18:01:44

标签: ios performance core-graphics resolution paint-code

我正在开发一款使用相当多图片的iOS应用。我对如何在应用程序中加载图像感到困惑。大约5年前就问过similar question。但从那时起,情况发生了很大变化。所以我想,开始一个新线程会更有意义。

我认为我有两种选择:

  1. 使用PaintCode应用程序(你可以找到它here),它为你提供了在运行时绘制图像的CG代码。

  2. 放入.png图像文件(1x,2x,3x)

  3. 关于第一个选项的事情是:

    • The first most important and unbeatable feature: Draw dynamic images i.e. to be able to change the content and gives basic animation effects using variables and equations
    
    • The second most important thing: parametric images that behaves perfectly when frame changes no stretching or distortion
    
    • Less size - As we not gonna use image files, reduces the overall size of the app drastically (top concern these days). E.g. PaintCode App in itself weights only ~5 MB (leaving out icon files).
    
    • Resolution independence
    
    • Very easy to use. Especially you don't need to remember names. You simply make some function calls.
    

    我主要担心的是:

    1. 在运行时绘制图像是否会影响性能和其他关键参数。
    2. 在什么情况下,png文件会更合适。
    3. 所以,我在这里,寻求更多知识渊博的人的意见。 提前谢谢。

1 个答案:

答案 0 :(得分:12)

如果绘图很简单 - 请使用Core Graphics。

您对所有支持Core Graphics / PaintCode方法的观点都是正确的。

正如您所说,它是未来的证明,比导入资产更灵活。

  • 您想要更改该自定义按钮的颜色吗?在函数中输入不同的参数,而不是为每个分辨率重新制作3个图像。

  • 您想缩放该图纸吗?只需用新尺寸重新绘制它。

  • 新款iPhone 8s在不久的将来会推出4倍显示屏吗?您的应用已经可以处理了。

正如您所说,它会缩小您的应用包的大小,这太棒了。

  • 为用户下载的次数较少,而且对您的尺寸优化的担忧较少。

然而

使用Core Graphics进行绘图是在CPU上完成的,因此如果你做了很多&主线程上的复杂图纸。

作为Tricertops says,复杂CG绘图的一个主要示例是具有大半径的阴影。另一个例子是在您的上下文中使用复杂的路径。

不要绝望,有办法解决这个问题!

  • 您可以在后台线程 上进行离线绘制,然后将绘制的图像传递到主线程的屏幕上(必须从主线程进行UI更新),但这仍然会导致一些延迟问题(图像只是出现在屏幕上)。但是,这可能是加载复杂图纸的好方法,您将在应用的后期使用它。

  • 您还可以通过在加载应用时加载Core Graphics图片来牺牲一些应用启动时间,但这可能对用户不利,具体取决于图像的复杂程度和数量你需要画画。

  • 您可以通过保留经常绘制的图像缓存(按钮背景等)来重复使用图纸。这样可以牺牲一点RAM来提高性能。 PaintCode实际上是automatically does this when you use non-parameterised StyleKits

虽然看到iOS硬件比when this question was asked快得多,但绘制Core Graphics代码的实际CPU使用率比以前少得多,因此您现在可以使用更复杂的图纸在更快的设备上。

但是,您可能会发现某些复杂的绘图根本不可能,或者会在永久在Core Graphics中创建。在这种情况下,我肯定建议使用图像。

As the answerer非常雄辩地点上你链接到的帖子:

  

最快的计划是首先进入市场的计划。

如果您发现自己花费数周时间尝试在Core Graphics中创建绘图,那么您最好只使用图片并更有效地花费时间!

虽然,只要您保持简单的绘图,并尽可能重复使用绘图,您就不必担心使用Core Graphics时的性能问题。

在我看来,使用Core Graphics / PaintCode进行简单绘图的优点超过了缺点,只要它被正确使用。