0

*我需要我的 ViewController 有一个图像的副本来保存,在我的 PresentViewController 被解雇后它正在消失 - *


我有一个UIViewController使用xib 调用presentViewController (modalViewController) 的方法。在 xib 内部,我有一个UIImageView,我可以用标记(在上面绘制)进行标记。我的问题是当我关闭 presentViewController 时,我设置的变量 (a UIImage) 回到了nil,并且我无法将标记图像设置到UIImageView我的 main 上的 a 上UIViewController

绘图代码:

UITouch *touch = [touches anyObject];
currentPoint = [touch locationInView:drawImage];

UIGraphicsBeginImageContext(drawImage.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0,
                                       drawImage.frame.size.width,
                                       drawImage.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//Savve the drawings on image to a UIImage
savedMarkup = drawImage.image;
lastPoint = currentPoint;

我尝试了 2 种代码方法AB来设置绘制到主 UIVC 上的图像。

如果我从上面删除该行,则方法 A 有效UIGraphicsEndImageContext,但如果我删除该行,我将面临许多内存警告,然后在一些绘图后崩溃,正如预期的那样。

方法A:UIGraphicsBeginImageContextWithOptions(AView.drawImage.bounds.size, NO, 0.0);

[AView.drawImage.image drawInRect:CGRectMake(0, 0,
                                            AView.drawImage.frame.size.width,
                                            AView.drawImage.frame.size.height)];
UIImage *savedMarkup = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

AView.annotatedImage.image = savedMarkup;
[annotation dismissViewControllerAnimated:YES completion:nil];

方法B:

AView.annotatedImage.image = AView.savedMarkup; 

使用方法 B,如果我NSLog的值AView.savedMarkup- 它记录“(null)”。

我一直在喋喋不休地想出这个!非常感谢您的帮助!

4

2 回答 2

1

看看这个:

如何使用 uikit 制作简单的绘图应用程序

它可能对你有用:)

于 2013-09-13T15:07:30.127 回答
1

这个问题很可能是 imageView 没有实例化......处理这个问题的一种方法可能是在呈现视图控制器类中进行延迟实例化。另一种方法如下......

在呈现模态视图的视图控制器上创建一个公共属性。

所以在 myclass.h 文件中

@property (strong, nonatomic) UIImage *annotatedImage;

然后,在关闭您的视图控制器之前写入。

(MyClass *) presentingController = (MyClass *) self.presentingViewController
presentingController.annotatedImage = annotatedImage;

然后在完成处理程序中做你想做的事情......

[self dismissViewControllerAnimated:YES completion:^{ /* handle here */}];

或者在 viewDidAppear 中:

if (annotatedImage){
   // action here such as allocating the image view and setting the image
 }

然后呈现视图控制器将拥有图像的副本以保留并执行您想要的操作。

编辑

当然,请确保您的绘图代码有效。

于 2013-08-24T00:33:13.043 回答