我有一个应用程序,您可以在其中输入某些表单的信息,然后按一个按钮通过电子邮件发送图像,其中包含图像上的表单信息。我将表单中的字符串转换为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的图像上,并将新图像附加到电子邮件中。
答案 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