我希望这个标题有点意思。
我有 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;
}