在UIImageView中编辑图像并使用新图像

时间:2016-01-26 17:40:22

标签: ios objective-c uiimageview

我有一个应用程序,您可以在其中输入某些表单的信息,然后按一个按钮通过电子邮件发送图像,其中包含图像上的表单信息。我将表单中的字符串转换为UILabel并将它们放在UIImageView上,然后我尝试获取该图像并将其作为附件发送。当我按下按钮时,我只是在电子邮件中获取原始图像。这是我的代码:

-(IBAction)emailToCustomer:(id)sender {
    UIImage *rebateImage = [UIImage imageNamed:@"rebate.png"];

    UIImageView *rebateImView = [[UIImageView alloc]initWithImage:rebateImage];

    UILabel *rebateLabel = [[UILabel alloc]init];
    rebateLabel.text = productField.text;

    [rebateImView addSubview:rebateLabel];

    NSData *rebateData = UIImagePNGRepresentation(rebateImView.image);

    MFMailCOmposeViewController *mailVC = [[MFMailComposeViewController alloc]init];
    [mailVC setMailComposeDelegate:self];

    if([MFMailComposeViewController canSendMail]) {
       [mailVC setSubject:@"Rebate"];
       [mailVC addAttachmentData:rebateData mimeType:@"image/png" filename:@"RebateCoupon.png"];
       [self presentViewController:mailVC animated:YES completion:nil]; 
    } else {
       NSLog(@"Can't Send Mail");
    }
}

即使我在字段中输入信息,我在电子邮件中收到的只是原始的回扣图像。我希望将productField中的文本放在UIImageView的图像上,并将新图像附加到电子邮件中。

1 个答案:

答案 0 :(得分:0)

即使您将标签放在图像视图上,它也只会返回它包含的图像。

如果您想让图像上有标签,您需要对图像视图进行快照,并将其附加到邮件中:

注意:您需要提供imageview框架,否则您获得的快照将不属于图片视图。

- (UIImage*)captureView:(UIView *)view
{
    CGRect rect = [view frame];
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [self.view.layer renderInContext:context];
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

然后您可以通过以下方式附加图片:

    UIImage *img=[self captureView: rebateImView];
   NSData *rebateData = UIImagePNGRepresentation(img);

另一种方式:您需要使用所需的文字重新绘制图像。请参阅answer