如何在Swift中共享图像

时间:2017-05-29 03:58:12

标签: swift swift3 uiimage

我试图分享我自己生成的图像。但是,当我尝试分享图像时,效果不佳。 这是分享的代码

     func shareQR(){
        //mainImage is the view that hold the image I want to share
        let tempImage = view.mainImage.image

        let imageToShare = [ tempImage ]
        let activityViewController = UIActivityViewController(activityItems: imageToShare as! [UIImage], applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view 

        activityViewController.excludedActivityTypes = [ UIActivityType.airDrop ]

        self.present(activityViewController, animated: true, completion: nil)
    }

所以我尝试调试,结果是我的tempImage值与我想要分享的值相同。然后我尝试对图像进行硬编码并成为let tempImage = UIImage(named: "image.png") 并点按分享按钮,它完美无缺。

所以我想通了,我是否必须首先将我的图像保存到本地文件然后调用它?

如果是的话怎么样?我尝试使用此代码但失败了。

 // Create path.
 let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        let filePath = "\(paths[0])/temp.png"

 // Save image.
 UIImagePNGRepresentation(image!)?.write(to: filePath)
  

错误是:无法将“String”类型的值转换为预期值   此行中的参数类型“网址” UIImagePNGRepresentation(tempImage!)?.write(to: filePath)

或许我不需要保存图片?怎么样?

谢谢

1 个答案:

答案 0 :(得分:0)

您的变量image似乎是String变量而不是UIImage(因此您发布的错误)。要确认此理论,请在代码中添加以下行

print(tempImage)

之后

let tempImage = view.mainImageimage

如果它打印图像名称,那么您的变量是String变量。如果它按照UIImage的行打印某些内容,那么它就是一张实际图片,我们可以进一步调查此问题。让我知道你得到的结果

修改 要在本地存储文件,请使用以下代码

if let data = UIImagePNGRepresentation(tempImage) {
    let filename = getDocumentsDirectory().appendingPathComponent("copy.png")
    try? data.write(to: filename)
}

func getDocumentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let documentsDirectory = paths[0]
    return documentsDirectory
}