如何在没有内存问题的情况下使用手势识别器在大图像上绘制线条

时间:2012-09-12 13:41:06

标签: ios ipad drawing core-graphics cgcontext

我正在开发一个应用程序,在某些时候用户需要在图像上绘制一些内容。 我编写的代码适用于1500x1500及更小的图像,但是一旦图像变大,问题便会开始。

当图像太大时,绘图需要更多时间,并且很少会调用手势识别器。

我是这样做的:有两个类,一个是名为UIScrollView的{​​{1}}子类,另一个是名为DrawView的{​​{1}}子类。 UIImageView有一个MyPen,每当它被识别时就会向DrawView发送消息(我得到UIPanGestureRecognizer并依赖于它我开始或移动一行)。 MyPen在其子视图中有两个UIImageView对象,一个用于背景图像,另一个用于图形(笔)。

这是我在MyPen中所做的事情:

[recognizer state]

当图像足够大时,CoreGraphics需要一些时间来渲染它,因此手势识别器不会经常被识别,并且向笔发送的点数较少。

这里的问题是:有没有办法优化绘图?我应该使用另一个线程吗?还有另一种方法吗? 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您应该将前景(线条)和背景(应该绘制线条的图像)分成两个视图。因此,每次用户移动手指时,您只能更新前景视图。当用户完成绘图时,您可以将两个视图组合成一个图像。

在CGContext中绘制图像非常昂贵,特别是在大的时候。