Can I make my app take a screenshot of the contents of a view and attach it to an email? How?
You can convert your view to an image, then you could create an email with it.
This code (from here) will allow you to send an email with an attachment:
- (void)emailImageWithImageData:(NSData *)data
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
// Set the subject of email
[picker setSubject:@"Picture from my iPhone!"];
// Add email addresses
// Notice three sections: "to" "cc" and "bcc"
[picker setToRecipients:[NSArray arrayWithObjects:@"[email protected]", @"[email protected]", nil]];
[picker setCcRecipients:[NSArray arrayWithObject:@"[email protected]"]];
[picker setBccRecipients:[NSArray arrayWithObject:@"[email protected]"]];
// Fill out the email body text
NSString *emailBody = @"I just took this picture, check it out.";
// This is not an HTML formatted email
[picker setMessageBody:emailBody isHTML:NO];
// Attach image data to the email
// 'CameraImage.png' is the file name that will be attached to the email
[picker addAttachmentData:data mimeType:@"image/png" fileName:@"CameraImage"];
// Show email view
[self presentModalViewController:picker animated:YES];
//if you have a navigation controller: use that to present, else the user will not
//be able to tap the send/cancel buttons
//[self.navigationController presentModalViewController:picker animated:YES];
// Release picker
[picker release];
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
// Called once the email is sent
// Remove the email view controller
[self dismissModalViewControllerAnimated:YES];
}
To convert your view graphical representation to an image, use the code (from here):
UIGraphicsBeginImageContext(self.window.bounds.size);
[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * data = UIImagePNGRepresentation(image);
[self emailImageWithImageData:data];
From this site:
// CREATING MAIL VIEW
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"Check this route out"];
[controller setMessageBody:@"Attaching a shot of covered route." isHTML:NO];
// MAKING A SCREENSHOT
UIGraphicsBeginImageContext(_mapView.frame.size);
[_mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// ATTACHING A SCREENSHOT
NSData *myData = UIImagePNGRepresentation(screenshot);
[controller addAttachmentData:myData mimeType:@"image/png" fileName:@"route"];
// SHOWING MAIL VIEW
[self presentModalViewController:controller animated:YES];
[controller release];
Yes you can please check the below code may help you
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* image = [GMSScreenshot screenshotOfMainScreen];
UIGraphicsEndImageContext();
data = UIImagePNGRepresentation(image);
[picker addAttachmentData:data mimeType:@"image/jpg" fileName:@"Screenshot"];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With