1

我试图在 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();
4

1 回答 1

0

据我了解,您的模型是一个图形应用程序,具有初始背景,然后是一堆图层,每个图层上都有一个或多个对象。

如果是这样,那么您保存的图像将代表此堆栈。您可以保留代表堆栈的 n-1 的临时图像,然后是当前图像,以使渲染速度更快。事实上,我要做的是将临时图像放在一个视图中,而当前活动对象在另一个视图中位于临时图像之上。

当您有撤消时,您可以首先擦除当前活动对象。然后,第二次撤消将迫使您通过从图像 0 开始并在基础图像上绘制每一层来重新渲染临时图片。使这项工作有效的是,除了绘制的位之外,每一层都是透明的。

要创建临时图像,我将使用位图上下文并在代码中应用图层,不确定 Quartz 方法是否会为您执行此操作(它们可能会)。

于 2013-05-20T12:45:00.353 回答