我正在为练习创建一个简单的绘图应用程序。用户沿着屏幕拖动他/她的手指,它的颜色为100px x 100px的正方形。
我目前通过创建一个新的彩色UIView来实现这一目标,用户点击它,这是有效的。但是,经过一段时间的着色后,存在很大的滞后,我认为这是因为有太多的UIViews作为主视图的子视图。
无论有多少UIViews,我怎么能和其他同样在拖动手指上创建UIViews的人都会将延迟减少到无。我也认为这可能是一项不可能完成的任务,那么像我这样的人怎么能在沿着屏幕拖动的手指主视图中为上面所述尺寸的立方体上色?
我知道这可能看起来像一个特定的问题,但我相信如果有大量的UIViews可用性能降低的选项可用,它可以帮助其他人了解如何减少延迟。
答案 0 :(得分:2)
一种方法是将每个正方形绘制成图像并显示该图像,而不是围绕每个正方形的UIView。
如果你的绘图很简单,你可以使用OpenGL来做到这一点,这要快得多。您应该查看Apple的GL Paint Sample Code,其中显示了如何在OpenGL中执行此操作。
如果您的绘图对于OpenGL来说过于复杂,您可以创建一个CGBitmapContext,并在用户拖动手指时将每个方块绘制到该上下文中。每当您在该位图中绘制一个新的正方形时,您可以将位图转换为图像(通过CGBitmapConxtextCreateImage)并将该图像显示为UIImageView。
答案 1 :(得分:1)
我想到了两件事:
1-使用“仪器”工具检查是否泄漏任何内存
2-如果您只是为视图着色而不是为每个视图创建图像,请设置UIView的背景颜色属性或覆盖drawRect方法以执行自定义绘图
答案 2 :(得分:0)
我认为你要找的是UIView的drawRect:方法。您可以创建自定义UIView(您已经可以使用它)并覆盖drawRect方法并在那里进行绘制!您必须将图形保存在数组或其他容器中,并在更改阵列内容时调用setNeedsDisplay方法。