1

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

我目前通过在用户点击的地方创建一个新的彩色 UIView 来实现这一点,这是有效的。但是,经过一段时间的着色,会有很大的延迟,我认为这是因为作为主视图的子视图的 UIView 太多。

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

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

4

3 回答 3

2

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

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

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

于 2012-12-13T23:16:29.513 回答
1

我想到了两件事:

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

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

于 2012-12-14T01:52:38.357 回答
0

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

于 2012-12-13T23:10:37.847 回答