0

我希望这个标题有点意思。

我有 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;
}
4

1 回答 1

1

我只是在猜测可能的情况......

假设您self.previewView在其他视图上显示,例如self.view

当您添加self.previewView到 时comp,它可能已从 中删除self.view。(考虑到 UIView.superview 只是单个实例,我认为这很有可能)。

如果是这种情况,在获取图像后重新添加self.previewViewself.view解决问题。

于 2012-10-08T00:05:08.403 回答