Created
April 15, 2018 11:00
-
-
Save mansi-27/b53d1dfb942bac4ea14ea69055325c0a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import UIKit | |
| class ViewController: UIViewController { | |
| /// Creating UIDocumentInteractionController instance. | |
| let documentInteractionController = UIDocumentInteractionController() | |
| override func viewDidLoad() { | |
| super.viewDidLoad() | |
| /// Setting UIDocumentInteractionController delegate. | |
| documentInteractionController.delegate = self | |
| } | |
| @IBAction func showOptionsTapped(_ sender: UIButton) { | |
| /// Passing the remote URL of the file, to be stored and then opted with mutliple actions for the user to perform | |
| storeAndShare(withURLString: "https://images5.alphacoders.com/581/581655.jpg") | |
| } | |
| override func didReceiveMemoryWarning() { | |
| super.didReceiveMemoryWarning() | |
| } | |
| } | |
| extension ViewController { | |
| /// This function will set all the required properties, and then provide a preview for the document | |
| func share(url: URL) { | |
| documentInteractionController.url = url | |
| documentInteractionController.uti = url.typeIdentifier ?? "public.data, public.content" | |
| documentInteractionController.name = url.localizedName ?? url.lastPathComponent | |
| documentInteractionController.presentPreview(animated: true) | |
| } | |
| /// This function will store your document to some temporary URL and then provide sharing, copying, printing, saving options to the user | |
| func storeAndShare(withURLString: String) { | |
| guard let url = URL(string: withURLString) else { return } | |
| /// START YOUR ACTIVITY INDICATOR HERE | |
| URLSession.shared.dataTask(with: url) { data, response, error in | |
| guard let data = data, error == nil else { return } | |
| let tmpURL = FileManager.default.temporaryDirectory | |
| .appendingPathComponent(response?.suggestedFilename ?? "fileName.png") | |
| do { | |
| try data.write(to: tmpURL) | |
| } catch { | |
| print(error) | |
| } | |
| DispatchQueue.main.async { | |
| /// STOP YOUR ACTIVITY INDICATOR HERE | |
| self.share(url: tmpURL) | |
| } | |
| }.resume() | |
| } | |
| } | |
| extension ViewController: UIDocumentInteractionControllerDelegate { | |
| /// If presenting atop a navigation stack, provide the navigation controller in order to animate in a manner consistent with the rest of the platform | |
| func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController { | |
| guard let navVC = self.navigationController else { | |
| return self | |
| } | |
| return navVC | |
| } | |
| } | |
| extension URL { | |
| var typeIdentifier: String? { | |
| return (try? resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier | |
| } | |
| var localizedName: String? { | |
| return (try? resourceValues(forKeys: [.localizedNameKey]))?.localizedName | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment