gpt4 book ai didi

ios - 在类之间将 UIImage 分配给 UIImageView

转载 作者:行者123 更新时间:2023-11-28 22:27:53 26 4
gpt4 key购买 nike

*我需要我的 ViewController 有一个图像副本来保存,在我的 PresentViewController 被关闭后它会消失 – *


我有一个 UIViewController,我从中调用带有 xib 的 presentViewController (modalViewController)。在 xib 中,我有一个 UIImageView,我可以用标记(绘制)对其进行标记。我的问题是当我关闭 presentViewController 时,我设置的变量(UIImage)返回到 nil,并且我无法将标记图像设置到 UIImageView 在我的主 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 上的图像。

如果我从 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];

方法二:

AView.annotatedImage.image = AView.savedMarkup; 

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

我一直在忙着弄清楚这个问题!非常感谢您的帮助!

最佳答案

这个问题很可能是 imageView 没有被实例化......处理这个问题的一种方法可能是在呈现 View Controller 类中进行惰性实例化。另一种方法如下...

在呈现模态视图的 View Controller 上创建一个公共(public)属性。

所以在myclass.h文件中

@property (strong, nonatomic) UIImage *annotatedImage;

然后,在关闭你的 View Controller 之前写。

(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
}

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

编辑

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

关于ios - 在类之间将 UIImage 分配给 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18412973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com