Ios 截图并以编程方式发送

Ios 截图并以编程方式发送,ios,sms,screenshot,mms,Ios,Sms,Screenshot,Mms,当用户点击我的应用程序中的按钮时,我想截取当前视图的屏幕截图,并打开一条带有该屏幕截图图像的文本消息作为附件。在iOS7中如何执行此操作 (我看到过关于如何拍摄屏幕截图的帖子,但没有看到任何关于拍摄屏幕截图并将其附加到消息上的帖子) 谢谢 1.要拍摄屏幕截图,请添加QuartzCore框架,您可以使用UIGraphicsBeginImageContextWithOptions UIGraphicsBeginImageContextWithOptions(self.view.bounds.size

当用户点击我的应用程序中的按钮时,我想截取当前视图的屏幕截图,并打开一条带有该屏幕截图图像的文本消息作为附件。在iOS7中如何执行此操作

(我看到过关于如何拍摄屏幕截图的帖子,但没有看到任何关于拍摄屏幕截图并将其附加到消息上的帖子)


谢谢

1.要拍摄屏幕截图,请添加
QuartzCore
框架,您可以使用
UIGraphicsBeginImageContextWithOptions

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData *theImageData=UIImageJPEGRepresentation(theImage, 1.0 ); //you can use PNG too
2.要在邮件中附加此图像,请在构建阶段添加
MessageUI
framework。并使用此
NSData
进行附加,类似于

//Check if mail can be sent
if ([MFMailComposeViewController canSendMail])
    {
        MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
        mailer.mailComposeDelegate = self;

       // Add NSData you got as screenshot to attachment
       [mailer addAttachmentData:theImageData mimeType:@"image/jpeg" fileName:[NSString stringWithFormat:@"test.jpg"]];  
        [self presentModalViewController:mailer animated:YES];

    }
编辑:

3.通过短信发送图像

    // Will Work only for iOS 7

    MFMessageComposeViewController* messageComposer = [[MFMessageComposeViewController alloc] init];
     messageComposer.messageComposeDelegate = self; // As mentioned by the OP in comments, we have to set messageComposeDelegate to self.
     messageComposer.recipients = [NSArray arrayWithObject:@"123456789"];

 if([MFMessageComposeViewController canSendText])
  {

    if([MFMessageComposeViewController respondsToSelector:@selector(canSendAttachments)] && [MFMessageComposeViewController canSendAttachments])
    {
        NSString* uti = (NSString*)kUTTypeMessage;
        [messageComposer addAttachmentData:theImageData typeIdentifier:uti filename:@"filename.jpg"];
    }

    [self presentViewController:messageComposer animated:YES completion:nil];
  }
处理来自
MFMessageComposeViewController

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{

}
if ([MFMailComposeViewController canSendMail])
    {
        MFMailComposeViewController *cvc = [[MFMailComposeViewController alloc] init];
        cvc.mailComposeDelegate = self;

       [cvc addAttachmentData:data mimeType:@"image/jpeg" fileName:[NSString stringWithFormat:@"YOUR_IMAGE.png"]];  

        [self presentModalViewController:cvc animated:YES];

    }

要拍摄屏幕截图,您可以使用
Quartz Display Services
方法

您可以将rect作为

CGRect = [self bounds];
然后使用
CGDisplayCreateImageForRect

CGImageRef selectedScreenImage;
selectedScreenImage = CGDisplayCreateImageForRect(kCGDirectMainDisplay, rect);
将其转换为
NSData

NSData *data = (NSData *)CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(selectedScreenImage)));
然后使用
MFMailComposeViewController

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{

}
if ([MFMailComposeViewController canSendMail])
    {
        MFMailComposeViewController *cvc = [[MFMailComposeViewController alloc] init];
        cvc.mailComposeDelegate = self;

       [cvc addAttachmentData:data mimeType:@"image/jpeg" fileName:[NSString stringWithFormat:@"YOUR_IMAGE.png"]];  

        [self presentModalViewController:cvc animated:YES];

    }
发送彩信

- (UIImage *) imageFromViewIniOS7
{
UIImage* image = nil;

UIGraphicsBeginImageContext(contentScrollview.contentSize);
{
    CGPoint savedContentOffset = contentScrollview.contentOffset;
    CGRect savedFrame = contentScrollview.frame;

    contentScrollview.contentOffset = CGPointZero;
    contentScrollview.frame = CGRectMake(0, 0, contentScrollview.contentSize.width, contentScrollview.contentSize.height);
    if ([[NSString versionofiOS] intValue]>=7)
    {
        [contentScrollview drawViewHierarchyInRect:contentScrollview.bounds afterScreenUpdates:YES];

    }
    else
    {
        [contentScrollview.layer renderInContext: UIGraphicsGetCurrentContext()];

    }
    image = UIGraphicsGetImageFromCurrentImageContext();

    contentScrollview.contentOffset = savedContentOffset;
    contentScrollview.frame = savedFrame;
}
UIGraphicsEndImageContext();


return image;
}
-(void)buttonAction
{
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; 
pasteboard.persistent = YES;
pasteboard.image = [self imageFromViewIniOS7];

NSString *phoneToCall = @"sms:";
NSString *phoneToCallEncoded = [phoneToCall stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL *url = [[NSURL alloc] initWithString:phoneToCallEncoded];
[[UIApplication sharedApplication] openURL:url];    

if([MFMessageComposeViewController canSendText]) {
NSMutableString *emailBody = [[NSMutableString alloc] initWithString:@"Your Email Body"];
picker.messageComposeDelegate = self;
picker.recipients = [NSArray arrayWithObject:@"123456789"];
[picker setBody:emailBody];// your recipient number or self for testing
picker.body = emailBody;
NSLog(@"Picker -- %@",picker.body);
[self presentModalViewController:picker animated:YES];
NSLog(@"SMS fired");
}
}

要拍摄屏幕截图,您可以使用
Quartz显示服务
,即
CGDisplayCreateImageForRect
CGDisplayCreateImageForRect
您的问题是将屏幕截图作为彩信发送吗?您是否编写了截屏代码?我可以截屏,但我想自动将其连接到彩信。这是一个很好的解决方案,但我确实需要通过短信(SMS/MMS)来实现。有什么办法吗?@shikaka,请检查编辑。一个问题是,这只适用于iOS 7。而且还没有在设备上测试过。很抱歉那份了不起的工作。还有2个问题:1-完成后如何退出彩信撰写视图?它结冰了?2-它不需要整个屏幕的截图。导航栏不在照片中,底部有一个奇怪的空白。你知道为什么吗?@shikaka。要退出MMS compose视图控制器,您必须实现委托方法
-(void)messageComposeViewController:(MFMessageComposeViewController*)控制器didFinishWithResult:(MessageComposeResult)结果在这里,您给出“[self dismissViewControllerAnimated:YES completion:nil];”。当点击“取消/完成”或出现任何错误时,将调用该函数。@shikaka,对于第二个问题,我不太确定,抱歉。也许你可以试试
UIWindow*window=[[UIApplication sharedApplication]keyWindow];UIView*viewForScreen=window.viewForBaselineLayout,不确定是否有效谢谢。是否可以在不需要粘贴的情况下执行此操作?只是自动在文字信息中显示图像?