当我们在iPhone SDK中绘制时如何“撤消”?

我有一个绘图应用程序,我想在其中实现UNDOfunction,以便用户可以撤消已完成的最后一个绘图笔画。

你可以让我知道如何做到这一点?

谢谢

首先请说明你用什么来画画。 你使用任何API或核心graphics框架进行绘图。

以下是我find的链接中的一些方法。

做法:

  1. 在touchesEnded上,将图像保存为应用沙箱,名称如.. 1.png,2.png等,然后在“撤消”variables上加上一个计数。 当用户按下撤消时,只需加载旧的图像库的计数。 (这是我可以粗略的想到的,但还没有经过编码,但听起来很简单的代码)。

  2. NSUndoManager。

希望这有助于任何其他人想要做到这一点。

参考链接:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/46996-drawing-app-how-do-undo.html

干杯

-(void)undoButtonClicked { if([pathArray count]>0){ UIBezierPath *_path=[pathArray lastObject]; [pathArray removeLastObject]; [bufferArray addObject:_path]; [self setNeedsDisplay]; } } 

这取决于很多东西,你必须更具体地说明你正在使用的绘图方法,例如,如果你正在谈论“铅笔”笔画,而你的绘图方法使用石英来绘制一些东西,而你只对最后一个笔画或改变,你总是可以保存当前的graphics上下文(图像上下文或其他),并在出现撤消的情况下显示。 如果你想允许多个笔画被撤消,你将不得不把它们添加到一个数组,所以你可以重新绘制到撤消。 如果你使用开放的话,那么它也是不同的。

没有iPhone的具体

像素canvas:

您的select是保留整个canvas或由笔画覆盖的区域的快照。 撤销操作将popup您的撤消堆栈并重新绘制您所堆放的缓冲区。

不方便的是正确调整撤销限制以避免占用内存。

vector绘图:

这是非常微不足道的….

我简单的解决scheme是,1.存储CGPath。 2.您可以使用清晰混合模式绘制path来清除它。

 CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);