Cocoa touch 将当前绘制到视图中的内容保存为图像

Cocoa touch 将当前绘制到视图中的内容保存为图像,cocoa-touch,drawing,Cocoa Touch,Drawing,我正在创建一个绘图应用程序,遇到了一个问题。我有一系列曲线;每条曲线保留一组点,每个点保留其颜色、厚度和坐标 调用I drawRect:时,我会重新绘制该数组中的所有曲线。问题是这个阵列越来越大,应用程序的速度也越来越慢 我的想法是,在每次重画结束时,将当前上下文保存为图像,释放曲线数组,然后在下一次重画时,将该图像用作背景。最终,我根本不需要曲线数组,只需要一个正在进行的曲线数组。这可能吗?或者有其他方法可以做到这一点?路径只包含点的信息,因此如果要跟踪渲染中的变化,需要一个单独的对象列表 我

我正在创建一个绘图应用程序,遇到了一个问题。我有一系列曲线;每条曲线保留一组点,每个点保留其颜色、厚度和坐标

调用I drawRect:时,我会重新绘制该数组中的所有曲线。问题是这个阵列越来越大,应用程序的速度也越来越慢


我的想法是,在每次重画结束时,将当前上下文保存为图像,释放曲线数组,然后在下一次重画时,将该图像用作背景。最终,我根本不需要曲线数组,只需要一个正在进行的曲线数组。这可能吗?或者有其他方法可以做到这一点?

路径只包含点的信息,因此如果要跟踪渲染中的变化,需要一个单独的对象列表

我通过为自己的自定义对象创建一个NSArray*来实现这一点,该NSArray*包含以下字段:用于捕捉点并简化绘制线段的NSBezierPath*、用于线段的CGPathDrawingMode,以及有关颜色和线条大小的信息

然后,当我绘制时,我迭代数组的元素,设置上下文的当前颜色,并根据我如何配置该段调用当前元素的NSBezierPath*上的stroke或fill


我还想知道是否有更快的方法,但这种方法确实很有效。

您可以将视图的相应层渲染为图像,以便在下一次迭代中更新。当然,在这种情况下,最好使用UIImageView作为视图来保存图像。在这种情况下,您可以更轻松地完成此过程

UIView *view = yourViewToSaveAsImage;

UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

是的,我也在做同样的事情。在添加了行数之后,我的性能变慢了:sI不会为每一行创建一个元素;只要一条线连接到另一条具有相同颜色、线宽等的线,我就会将所有这些线段合并到一个NSBezierPath*中。而且,我不存储行数;路径和数组长度可以用来推断它。我只需要添加UIGraphicsGetImage,对吗。。。如果我已经设置了上下文等?如果你的意思是drawRect-是的。但同样,如果您的视图是UIImageView的实例,您将免费获得此图像