将所有UILabel(具有适当的起源)组合成UIImage

时间:2013-06-17 17:29:32

标签: ios objective-c image uiimage cgcontext

因此,我正在处理的应用程序允许用户编写文本,应用程序将该文本转换为单独的UILabel(一个仅包含文本的UILabel,另一个与文本宽度相同的UILabel,但具有透明颜色背景)。我想在背景中将所有的uilabels与UIImage结合起来创建一个新的UIImage。

到目前为止,我有以下代码,但它不会产生任何实际结果,并且会喜欢任何人对这个问题的帮助:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(320, 416), NO, 0.0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[_imgViewFinal.layer renderInContext:ctx];
CGContextSaveGState(ctx);
for (int i = 0; i < _allLabels.count; i++) {
    UILabel *tempLabelBg = [_allBgs  objectAtIndex:i];
    CGContextTranslateCTM(ctx, tempLabelBg.frame.origin.x, tempLabelBg.frame.origin.y);
    CGContextSaveGState(ctx);
    [tempLabelBg.layer renderInContext:ctx];
    CGContextRestoreGState(ctx);

    UILabel *tempLabelText = [_allLabels objectAtIndex:i];
    [tempLabelText drawTextInRect:tempLabelText.frame];
}

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
NSData *imgData =  UIImageJPEGRepresentation(image, 1.0); 
UIImage * imagePNG = [UIImage imageWithData:imgData]; 
UIGraphicsEndImageContext();

*我知道drawTextInRect不使用我创建的contextref。我不确定如何将文本绘制到上下文中。我不认为我正在使用CGContextSave和Restore。

1 个答案:

答案 0 :(得分:1)

UIGraphicsBeginImageContextWithOptions(myView.bounds.size, myView.opaque, 0.0);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

其中myView是我们创建的图像(img)中你想要的任何视图..我没有测试它的标签,但它应该可以正常工作。