我正在使用此链接(http://www.raywenderlich.com/18840/how-to-make-a-simple-drawing-app-with-uikit)来制作绘画应用程序,我也想执行撤消操作。
我使用此代码将用户创建的每个草图保存在一个可变的`array [completeLines]中。 这些更改在touchesEnded方法
中完成**UIGraphicsBeginImageContextWithOptions(_tempDrawImage.bounds.size, NO,0.0);
[_tempDrawImage.image drawInRect:CGRectMake(0, 0, _tempDrawImage.frame.size.width, _tempDrawImage.frame.size.height)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
[completeLines addObject:image];**
并且,在按下撤消按钮时,我想从视图中删除最后一个草图。 帮助我从可变数组中取出图像引用并将其从视图中删除。
答案 0 :(得分:0)
虽然你正在做的事情可能会在短期内发挥作用,但当你有太多的图像存储时(无论是在内存中还是在磁盘上),它最终都会失败。因此,在前进中,您需要以其他格式存储绘图历史信息。
无论如何,基本上,你撤消时想要:
替换图纸视图内容意味着清除图纸上下文并将保存的图像绘制到图纸中。这可能有点混乱,因为它意味着在drawRect:
方法中使用逻辑(假设您没有用于绘制的后备层)。您可以保存一个表示重绘的属性,然后:
if (self.redraw) {
// clear the context
// draw the last image
self.redraw = NO;
}
// draw your new painting (appending to the graphics context)
将“承诺”内容与当前绘画(正在进行的触摸结果)分开会更好。现在,当您在drawRect:
之外撤消时,更新后备layer
以回滚内容。这意味着drawRect:
没有任何逻辑,因为它只是一直绘制已提交的内容和当前内容。这可以通过2个CALayer
个实例来完成,1个带有content
个图像,1个带有delegate
来绘制当前绘图。