iOS – 这是更好的select把图像? 核心graphics(PaintCode应用程序)与图像文件(PNG)

我正在开发一个iOS应用程序,使用相当多的图像。 我有点困惑如何加载应用程序中的图像。 大约在五年前,有人提出了类似的问题 。 但是从那以后很多改变了。 所以我想,开始一个新的线程会更有意义。

主要有两个选项,我想我有:

  1. 使用PaintCode应用程序(你可以在这里find它),它给你CG代码在运行时绘制图像。

  2. 把.png图像文件(1倍,2倍,3倍)

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

• The first most important and unbeatable feature: Draw dynamic images ie 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). Eg 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文件会更好。

所以,我在这里,寻求更多有知识的人的意见。 提前致谢。

如果绘图很简单 – 使用核心graphics。

你在所有的核心graphics/绘制代码的方法赞成你是正确的。

正如你所说,这是未来的certificate,比导入资产更加灵活。

  • 你想改变自定义button的颜色? 在您的function中input不同的参数,而不是为每个分辨率重新制作3个图像。

  • 你想扩大这个图纸? 只需重新绘制一个新的大小。

  • 新款iPhone 8s在不久的将来会以4x显示屏出现? 你的应用程序已经可以处理它。

正如你所说,它减less了你的应用程序包的大小,这是惊人的。

  • 这对于用户而言是较less的下载,并且对于您的尺寸优化的担心更小。

然而。

核心graphics的绘制是在CPU上完成的,因此如果在主线程上执行大量复杂的绘图,将会影响性能。

正如Tricertops所说 ,一个复杂的CG绘图的主要例子是大半径的阴影。 另一个例子是在你的上下文中使用复杂的path

不要绝望,有办法打击这个!

  • 您可以在后台线程上执行屏幕外显示 ,然后将绘制的图像传递到主线程上的屏幕(您必须从主线程执行UI更新),但这仍然会导致一些延迟问题(图像刚刚出现从无处的屏幕)。 但是,这可能是一个加载复杂绘图的好方法,您将在应用程序的后期阶段使用这些复杂绘图。

  • 您也可以在应用程序加载通过加载核心graphics图像来牺牲一些应用程序启动时间 ,但这可能对用户不利,这取决于您需要绘制的图像的复杂程度和数量。

  • 您可以通过保留经常绘制的图像caching(button背景等) 来重新使用绘图 。这将牺牲一点RAM来提高性能。 当使用非参数化的StyleKits时, PaintCode实际上会自动执行此操作 。

虽然看到iOS硬件比问这个问题时要快得多,但是绘制Core Graphics代码的实际CPU使用率比以前要less得多,所以现在可以在更快的设备上使用更复杂的绘图。

但是,您可能会发现一些复杂的绘图根本不可能,或者将永远在Core Graphics中创build。 在这种情况下,我肯定会推荐使用图像。

由于回复者非常雄辩地把你的post链接到:

最快的scheme是首先进入市场的scheme。

如果你花费数周的时间试图在Core Graphics中创build绘图,那么最好是使用图像并花费更多的时间来更有效地使用图像。


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

在我看来,使用Core Graphics / PaintCode进行简单绘图的优点远远超过了缺点,只要使用得当。