13

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

我认为我主要有两个选择:

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

  2. 放置 .png 图像文件(1x、2x、3x)

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

• 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文件会更合适。

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

4

1 回答 1

14

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

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

正如您所说,它是面向未来的,并且比导入资产灵活得多。

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

  • 你想放大那幅画吗?只需用新尺寸重新绘制即可。

  • 新款 iPhone 8s 会在不久的将来推出,配备 4 倍显示屏?您的应用程序已经可以处理它。

正如你所说,它减少了你的应用程序包的大小,这太棒了。

  • 这减少了用户的下载量,也减少了您对尺寸优化的担忧。

然而。

使用 Core Graphics 绘图是 100% 在 CPU 上完成的,因此如果您在主线程上进行大量复杂的绘图,它会影响性能。

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

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

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

  • 您还可以通过在应用程序加载时加载 Core Graphics 图像来牺牲一些应用程序启动时间,但这对于用户来说可能是不受欢迎的,具体取决于您需要绘制的图像的复杂性和数量。

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

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

但是,您可能会发现某些复杂的绘图根本不可能在 Core Graphics 中创建,或者需要很长时间才能创建。在这种情况下,我肯定会推荐使用图像。

作为回答者非常雄辩地提出了您链接到的帖子:

最快的程序是最先进入市场的程序。

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


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

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

于 2016-02-12T18:41:08.017 回答