1.添加MessageUI.framework
2.在头文件加入
// Add to top of file
#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>
// Mark class as implementing MFMailComposeViewControllerDelegate
@interface RootViewController : UIViewController <MFMailComposeViewControllerDelegate> {
3.发送邮件的界面显示
- (void)mailData:(NSData *)data {
if (![MFMailComposeViewController canSendMail]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Oops!", @"")
message:NSLocalizedString(@"Your device cannot send mail.", @"")
delegate:self
cancelButtonTitle:NSLocalizedString(@"OK", @"")
otherButtonTitles:nil];
[alert show];
[alert release];
return;
}
// Start up mail picker
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
UINavigationBar *bar = picker.navigationBar;
picker.mailComposeDelegate = self;
[picker setSubject:@"Check out this cute wallpaper!"];
[picker addAttachmentData:data mimeType:@"image/jpg" fileName:@"wallpaper.jpg"];
// Set up the recipients.
NSArray *toRecipients = [NSArray arrayWithObjects:nil];
[picker setToRecipients:toRecipients];
// Fill out the email body text.
NSString *actualBody = @"Check out this cute wallpaper! You can download the fullscreen version for free from: http://www.vickiwenderlich.com";
[picker setMessageBody:actualBody isHTML:NO];
// Present the mail composition interface.
[self presentModalViewController:picker animated:YES];
bar.topItem.title = @"Email Wallpaper";
[picker release]; // Can safely release the controller now.
}
4.点击发送邮件的按钮处理函数
- (IBAction)mailTapped:(id)sender {
CCScene * scene = [[CCDirector sharedDirector] runningScene];
HelloWorldLayer *layer = [scene.children objectAtIndex:0];
UIImage *curImage = layer.curImage;
NSData *data = UIImageJPEGRepresentation(curImage, 0.8);
[self mailData:data];
}
5.MFMailComposeViewControllerDelegate方法,当邮件发送完毕后调用,隐藏邮件界面
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError *)error {
[self dismissModalViewControllerAnimated:YES];
}
6.如果附件太大,可以用MBProgressHUD开源类库添加等待界面
// Add to top of file
#import "MBProgressHUD.h"
// Replace mailTapped method with the following
- (IBAction)mailTapped:(id)sender {
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"Preparing wallpaper...";
CCScene * scene = [[CCDirector sharedDirector] runningScene];
HelloWorldLayer *layer = [scene.children objectAtIndex:0];
UIImage *curImage = layer.curImage;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
NSData *data = UIImageJPEGRepresentation(curImage, 0.8);
dispatch_async(dispatch_get_main_queue(), ^(void) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
[self mailData:data];
});
});
}