【问题标题】:in-app Screenshot and attach to email IOS应用内屏幕截图并附加到电子邮件 IOS
【发布时间】:2013-11-23 13:43:27
【问题描述】:
我想知道用于截取屏幕截图并调出电子邮件窗口并将屏幕截图附加到电子邮件的代码,只需在应用程序中按一个按钮即可。到目前为止,我已经编写了代码,只需按一下按钮即可调出电子邮件窗口,我希望使用相同的按钮来获取并附上屏幕截图。如果你能指出我正确的方向,那将不胜感激。
- (IBAction)showEmail:(id)sender {
NSString *emailTitle = @"Test Email";
NSString *messageBody = @"CHECK OUT MY NEW SCORE!";
NSArray *toRecipents = [NSArray arrayWithObject:@"example@gmail.com"];
MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[mc setSubject:emailTitle];
[mc setMessageBody:messageBody isHTML:NO];
[mc setToRecipients:toRecipents];
// Present mail view controller on screen
[self presentViewController:mc animated:YES completion:NULL];
}
【问题讨论】:
标签:
ios
objective-c
email
screenshot
【解决方案1】:
MFMailComposeViewController 类有这个功能。
-(void)addAttachmentData:(NSData*)attachment mimeType:(NSString*)mimeType fileName:(NSString*)filename
这将获得屏幕截图
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext(self.window.bounds.size);
[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * data = UIImagePNGRepresentation(image);
然后在您的代码中执行此操作
[mc addAttachmentData:data mimeType:@"image/png" fileName:@"myscreenshot.png"];
【解决方案2】:
嘿 Sendgrid Evangelist,下面的代码使用 iOS 7 功能截取屏幕截图,并使用我们的 iOS sdk 通过电子邮件发送图像。
- (UIImage *)screenshot {
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
- (IBAction)sendScreenshot:(id)sender {
UIImage *screen = [self screenshot];
sendgrid *msg = [sendgrid user:@"username" andPass:@"password"];
msg.to = @"foo@bar.com";
msg.subject = @"screenshot";
msg.from = @"bar@foo.com";
msg.text = @"screenshot";
msg.html = @"<h1>screenshot</h1>";
[msg attachImage:screen];
[msg sendWithWeb];
}