我希望这个标题有道理。
我有UIView(在IB中创建)我添加东西(图像)。然后,我有一个带有一些文字的UILabel。现在,我想制作一个UIImage,我喜欢这样:
UIView *comp = [[UIView alloc] initWithFrame:self.previewView.frame];
[comp addSubview:self.previewView];
[comp addSubview:self.lblCaption];
UIGraphicsBeginImageContextWithOptions(comp.bounds.size, NO, 1.0);
[comp.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.previewView和self.lblCaption都是在IB中创建的。 previewView只是一个屏幕填充视图。
按钮点击后,代码块在IBAction中执行。
哪个效果很好,我按预期获得图像并可以进一步处理。
但在那之后,«self.previewView»的内容消失了?当我做一个NSLog时,一切似乎都在那里,但它在屏幕上不再可见。
有谁知道这里发生了什么?
[编辑]
如下面的答案所述,视图之前被添加到self.view中,所以当我将它添加到comp时它被删除了。解决方案非常简单,实际上,我将代码更改为以下内容:(创建了一个返回UIImage的函数。这比在代码中执行它更清晰。
-(UIImage *)imageFromView:(UIView *)theView andLabel:(UILabel *)theLabel{
UIGraphicsBeginImageContextWithOptions(comp.bounds.size, NO, 1.0);
[theView.layer renderInContext:UIGraphicsGetCurrentContext()];
[theLabel.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
答案 0 :(得分:1)
我只是猜测假设可能的情况......
假设您在其他视图上显示self.previewView
,请说self.view
。
将self.previewView
添加到comp
后,它可能已从self.view
中删除。 (考虑到UIView.superview只是单个实例,我认为这很可能)。
如果是这种情况,请在获取图片后将self.previewView
重新添加到self.view
以解决问题。