太多的 UIViews 会导致滞后



我正在创建一个用于练习的应用程序,这是一个简单的绘图应用程序。用户沿着屏幕拖动他/她的手指,它的颜色为100px x 100px正方形。

我目前通过创建一个新的彩色 UIView 来实现这一点,用户点击其中,并且正在工作。但是,经过一段时间的着色后,存在很大的滞后,我相信这是由于UIViews作为主视图的子视图太多。

我和其他同样在拖动手指上创建 UIViews 的人如何将延迟减少到零,无论有多少 UIViews。我也认为也许这是一项不可能完成的任务,那么像我这样的人如何在主视图中用手指在屏幕上拖动的立方体上着色上述大小的立方体呢?

我知道这似乎是一个特定的问题,但我相信,如果有大量的 UIViews 可以使用性能降低选项,它可以帮助其他人了解如何减少延迟。

一种方法是将每个方块绘制成一个图像并显示该图像,而不是为每个方块保留一个UIView。

但是,如果您的绘图足够简单,则可以使用OpenGL来执行此操作,这要快得多。您应该查看Apple的GL Paint示例代码,其中显示了如何在OpenGL中执行此操作。

如果您的绘图对于 OpenGL 来说太复杂了,您可以创建一个 CGBitmapContext,并在用户拖动手指时将每个方块绘制到该上下文中。每当将新正方形绘制到该位图中时,都可以将位图转换为图像(通过CGBitmapConxtextCreateImage),并以UIImageView显示该图像。

我想

到了两件事:

1-使用仪器工具检查您是否泄漏了任何内存

2-如果您只是为视图着色而不是为每个视图创建图像,请设置 UIView 的背景颜色属性或重写 drawRect 方法来执行自定义绘图

我认为您正在寻找的是UIView的drawRect:方法。您可以创建自定义UIView(您可能已经拥有它)并覆盖drawRect方法并在那里进行绘图!您必须将图形保存在数组或其他容器中,并在数组内容发生更改时调用 setNeedsDisplay 方法。

最新更新