【问题标题】:Xcode swift send mail with screenshot?Xcode 快速发送带有屏幕截图的邮件?
【发布时间】:2016-03-01 09:40:49
【问题描述】:

如何将视图控制器中的屏幕截图附加到邮件中?我已经有发送邮件的代码了...

@IBAction func SendMail(sender: AnyObject) {
    let picker = MFMailComposeViewController()
    picker.mailComposeDelegate = self
    picker.setCcRecipients(["xx@xx"])
    picker.setSubject("xxx" + " " + itemName.text! + "-" + itemEtage.text! + "-" + itemRaum.text!)
    picker.setMessageBody("xx" + " " + itemNow.text! + " " + "xxx", isHTML: true)

    presentViewController(picker, animated: true, completion: nil)
}

【问题讨论】:

  • 你需要更清楚的问题,究竟是什么问题?你有截图吗?你知道如何将图像转换为数据吗?你知道如何附加文件吗?你研究过这些主题中的任何一个吗?这个问题太宽泛了。
  • @slevin,查看并尝试此解决方案以获取屏幕截图 - stackoverflow.com/a/29592307/5593725stackoverflow.com/a/25445629/5593725
  • 嗨,谢谢..我需要截屏并用一个按钮将其附加到新邮件中..
  • 谢谢大家...现在我可以截屏并将其保存到设备中。现在我必须尝试下面的附加代码

标签: ios swift email


【解决方案1】:

亲爱的,请参考以下代码

您可以使用带有文件附件的 MFMailComposer

使用 MFMailComposeViewController 在电子邮件正文中添加图像

 import MessageUI

func composeMail() {

    let mailComposeVC = MFMailComposeViewController()

    mailComposeVC.addAttachmentData(UIImageJPEGRepresentation(UIImage(named: "emailImage")!, CGFloat(1.0))!, mimeType: "image/jpeg", fileName:  "test.jpeg")

    mailComposeVC.setSubject("Email Subject")

    mailComposeVC.setMessageBody("<html><body><p>This is your message</p></body></html>", isHTML: true)

    self.presentViewController(mailComposeVC, animated: true, completion: nil)

}


文件作为附件

@IBAction func sendEmail(sender: UIButton) {
    //Check to see the device can send email.
    if( MFMailComposeViewController.canSendMail() ) {
        println("Can send email.")

        let mailComposer = MFMailComposeViewController()
        mailComposer.mailComposeDelegate = self

        //Set the subject and message of the email
        mailComposer.setSubject("Have you heard a swift?")
        mailComposer.setMessageBody("This is what they sound like.", isHTML: false)

        if let filePath = NSBundle.mainBundle().pathForResource("swifts", ofType: "wav") {
            println("File path loaded.")

            if let fileData = NSData(contentsOfFile: filePath) {
                println("File data loaded.")
                mailComposer.addAttachmentData(fileData, mimeType: "audio/wav", fileName: "swifts")
            }
        }
        self.presentViewController(mailComposer, animated: true, completion: nil)
    }
}

【讨论】:

    【解决方案2】:

    在 UIView 上创建一个将截图的扩展:

    extension UIView {
        func screenShot() -> UIImage {
            UIGraphicsBeginImageContextWithOptions(bounds.size, opaque, UIScreen.mainScreen().scale)
            let contextRef = UIGraphicsGetCurrentContext()
            CGContextTranslateCTM(contextRef, 0, 0)
            layer.renderInContext(contextRef!)
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return image
        }
    }
    

    您可以在任何视图上使用它来创建屏幕截图。然后按照提供的其他答案发送电子邮件。

    【讨论】:

      【解决方案3】:

      @Slevin 您只需将您拥有的图像(屏幕截图)附加到 MFMailComposer 对象

      //imageObject is image object
      var myData: NSData = UIImagePNGRepresentation(imageObject)
      picker.addAttachmentData(myData, mimeType: "image/png", fileName: "image.png")
      

      您可以使用以下代码将图像作为数据附加到 MFMailComposer 对象

      【讨论】:

        【解决方案4】:

        斯威夫特 5: 超级简单。

        首先创建 UIImage 变量:

        var image1 = UIImage?
        

        第二次创建简单的函数来保存截图:

        func saveScreenShot() {
          let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
          let pieImage = renderer.image { ctx in
             view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
            }
         }
        

        现在更新您的邮件功能:

        @IBAction func SendMail(sender: AnyObject) {
            saveScreenShot()
            let picker = MFMailComposeViewController()
            picker.mailComposeDelegate = self
            picker.setCcRecipients(["xx@xx"])
            picker.setSubject("xxx" + " " + itemName.text! + "-" + itemEtage.text! + "-" + itemRaum.text!)
            picker.setMessageBody("xx" + " " + itemNow.text! + " " + "xxx", isHTML: true)
            mailComposer.addAttachmentData(image1!.jpegData(compressionQuality: CGFloat(0.7))!, mimeType: "image/jpeg", fileName:  "test.jpeg")
        
            presentViewController(picker, animated: true, completion: nil)
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-13
          • 2015-04-06
          相关资源
          最近更新 更多