Share image using UIActivityViewController

Viewed 1034

I am sharing with UIActivityViewController but it is shared with different file name (random name). And when I share with the Photos app, then its share image with its real name. My question is: How to share images with its name using UIActivityViewController?

Answer: Hello All,

Yes, I got the answer. First you save image in docuementDirectory then share image link. Please ensure that share image link(saved image in docuement directory) instead of image.

@IBAction func shareImage(_ sender: UIButton) {

    var selectedImageArrayToShare:Array<NSURL> = [NSURL]()
    selectedImageArrayToShare.append(saveActivityControllerImage())
   let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: selectedImageArrayToShare as [Any], applicationActivities: nil)
    self.present(activityViewController, animated: true, completion: nil)
}


func saveActivityControllerImage() -> NSURL {

    var name:String=selectedPhotoName!.capitalized
    print(name.components(separatedBy: ".").last as Any)
    if name.components(separatedBy: ".").last!.lowercased() != "png" {
        name = name.replacingOccurrences(of: ".\(name.components(separatedBy: ".").last!)", with: ".jpg")
    }
    else {
        name = name.replacingOccurrences(of: ".\(name.components(separatedBy: ".").last!)", with: ".png")
    }
    let urlString : NSURL = getDocumentDirectoryPath(fileName: name)
    print("Image path : \(urlString)")
    if !FileManager.default.fileExists(atPath: urlString.absoluteString!) {
        do {
            var isSaved : Bool = false
            print(urlString.pathExtension as Any)
            if urlString.pathExtension?.lowercased() == "png" {
                isSaved = ((try  UIImagePNGRepresentation(photoPreviewImageView.image!)?.write(to: urlString as URL, options: Data.WritingOptions.atomic)) != nil)
            }
            else {
                isSaved = ((try  UIImageJPEGRepresentation(photoPreviewImageView.image!, 1.0)?.write(to: urlString as URL, options: Data.WritingOptions.atomic)) != nil)
            }

            if (isSaved) {
                return urlString

            } else {
                return NSURL.fileURL(withPath: "Blank") as NSURL
            }
        } catch {
            return NSURL.fileURL(withPath: "Blank") as NSURL
        }
    }
    return urlString
}

func getDocumentDirectoryPath(fileName:String) -> NSURL {

    let paths:NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
    let docuementDir:NSString = paths.object(at: 0) as! NSString
    return NSURL.fileURL(withPath: docuementDir.appendingPathComponent("NameIt/\(fileName)")) as NSURL
}
1 Answers
Related