提高绘制/滚动/动画效果

时间:2014-06-11 17:14:00

标签: ios objective-c performance uiview calayer

问题

我在我的应用中有一个视图。其中一个例子可能是这样......

enter image description here

目前我只有一个UIView,其中包含多个UIImageViews。但是屏幕上同时有多个。

然而,正如我所料(并且知道但希望尽快使其工作),性能是便便。我在iPhone 4S上大约40FPS。

我正在尝试不同的方式来显示视图,以便绘制/动画效果不是那么糟糕。

需要注意的几件事

  1. 目前视图是透明的,每个图像都有透明度(图像必须具有透明度才能在其他地方使用)。但是,在不可编辑的版本中,视图始终显示在白色背景上。

  2. 有些图片可能需要一段时间才能从互联网上传输。

  3. 所有图像都以完全相同的尺寸显示。

  4. 我想到的事情

    保持原样。

    这是最简单的事情,但是当屏幕上有很多视图时,某些设备的性能会非常差。

    绘制矩形

    我可以将每个图像直接渲染到具有白色背景的视图中。使用CoreGraphics渲染所有内容。但是,我不确定这会不会像我认为的那样有效,因为我会更频繁地调用,我会期待它?

    CALayers

    这是我认为可能是最好的选择,但我不确定如何最好地做到这一点。如果我可以创建一个CALayer,将图像作为内容布局,然后只显示它。我认为这将是最好的选择,但不确定如何最好地去做。

    渲染到UIImage

    我可以将整个视图呈现为具有白色背景的单个UIImage,然后将其显示为单个视图。

    问题

    我自己在这里,并试图从有关该领域知识的人那里获得一些意见,以寻求有关如何最好地开始尝试提高应用程序这部分性能的建议。

    由于

2 个答案:

答案 0 :(得分:0)

如果您有很多这些并且必须以实时速度渲染它们,您可能需要考虑使用OpenGL-ES。

您可以使用GLKView自行实施OpenGL-ES,也可以使用Cocos2d-iPhone等现有解决方案。

答案 1 :(得分:0)

如果您只需要图像视图进行显示,那么请使用图层。我建议创建一个单独的UIView子类来管理一组图层,每个图像一个图层。不要尝试自己进行图层渲染,除非你真的需要它来实现功能,因为它不太可能有意义地更快。

如果您为图片视图使用自动布局,这可能会对您的性能问题造成重大影响 - 当您快速滚动并且许多新视图布局时,自动布局会有点慢每帧都有许多新细胞,特别是在旧设备上。如果您看到ISIS *课程在您使用乐器进行配置文件时占用了大量时间,那就是自动布局。

最后,确保您的网络在后台线程上发生,以防止它中断UI并导致口吃。