我试图在iOS中为我的绘图应用程序执行撤消功能。我的方法是在每次绘制(直线,直线,正方形,圆形)之后,绘图将被添加到数组中,以便我可以在撤消时弹出/删除数组的lastObjectIndex,然后将数组的内容重新绘制到图像视图。我正在使用NSMutableArray和UIImage并使用UIGraphicsGetImageFromCurrentImageContext。我的问题是,如何将所有图像数组显示到一个UIImageView中?
这是我的代码:
imgArray = [[NSMutableArray alloc] init];
UIImage *tempImg = [[UIImage alloc] init];
tempImg = UIGraphicsGetImageFromCurrentImageContext();
[imgArray addObject:tempImg];
UIGraphicsEndImageContext();
UIGraphicsBeginImageContext(mainImage.frame.size);
[mainImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:1.0];
[tempImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:opacity];
mainImage.image = tempImg; //UIGraphicsGetImageFromCurrentImageContext();
tempImage.image = nil;
UIGraphicsEndImageContext();
答案 0 :(得分:0)
据我所知,你的模型是一个图形应用程序,比如初始背景,然后是一堆图层,每一层都有一个或多个对象。
如果是这样,那么您保存的图像将代表此堆栈。您可以保留一个临时图像,表示堆栈的n-1,然后是当前图像,以使渲染更快。事实上,我要做的是在视图中使用临时图像,并且在不同视图中的当前活动对象超过临时图像。
撤消后,您可以先擦除当前活动对象。然后,第二次撤消将强制您通过从图像0开始并在基础图像上绘制每个图层来重新渲染临时图像。这项工作的原因是除了绘制的位之外,每一层都是透明的。
要创建临时图像,我会使用位图上下文并在代码中应用这些图层,不确定Quartz方法是否会为您执行此操作(他们可能会这样做)。