我想知道是否可以通过iMessageExtension中的消息发送图像。我正在开发一个应用程序,发送者和接收者需要看到相同的图像。
这里是带有ImageView和ImageView的DetailViewController。图片应该通过消息发送
有几种方法可以做到这一点。如果你只是想发送一个常规的非动画图像,你可以避免将临时文件保存到磁盘(你可以通过在conversation
上调用insertAttachment
来发送),而直接使用MSMessageTemplateLayout
。你可以这样做:
let message = MSMessage()
let layout = MSMessageTemplateLayout()
layout.image = myImage
message.layout = layout
conversation.insert(message, completionHandler: nil)
下面的代码捕获视图并对其进行截屏,然后通过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
}