0

我想知道是否可以通过 iMessageExtension 中的消息发送图像。我正在开发一个应用程序,发送者和接收者需要看到相同的图像。
基本上这里是带有 ImageView 的 DetailViewController 和 ImageView.image 应该通过消息发送图像。

4

2 回答 2

1

下面的代码捕获一个视图并将其截屏,然后通过 iMessage 共享它。在运行 iOS 10 的 iPhone 7 上进行了测试,工作正常。

    let name = ""
    let desc = ""

    if MFMessageComposeViewController.canSendText() {
        let messageVC = MFMessageComposeViewController()
        messageVC.messageComposeDelegate = self
        if MFMessageComposeViewController.canSendAttachments() {
            let img = viewToCapture.getSnapshotImage()
            let imageData = UIImagePNGRepresentation(img)
            messageVC.addAttachmentData(imageData!, typeIdentifier: "image/png", filename: "image.png")
        } else {
            print("Message can't send attachments")
        }
        self.present(messageVC, animated: true, completion: nil)
    }

    let messageComposeViewController = configuredMessageViewController(name, detail: desc)

    if MFMessageComposeViewController.canSendText() {
        self.present(messageComposeViewController, animated: true, completion: nil)
    } else {
        shareStuff.msgError()
    }

请注意,上面使用此 UIView 扩展从屏幕捕获图像。如果这是您的第一个扩展,它是全局的,所以只需将代码放在您想要的任何位置(但不在类中):

public func getSnapshotImage() -> UIImage {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0)
    self.drawHierarchy(in: self.bounds, afterScreenUpdates: false)
    let snapshotImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return snapshotImage
}
于 2017-09-17T22:08:05.567 回答
1

有几种方法可以做到这一点。如果您只是想发送一个常规的非动画图像,您可以避免将临时文件保存到磁盘(您可以通过调用您的 来发送insertAttachmentconversation,而是MSMessageTemplateLayout直接使用。你可以这样做:

let message = MSMessage()
let layout = MSMessageTemplateLayout()
layout.image = myImage
message.layout = layout
conversation.insert(message, completionHandler: nil)
于 2016-10-15T16:44:42.097 回答