Swift照片库访问

我想从我的应用程序中的用户的照片库访问照片,我正在看UIImagePickerController这样做。 但是,我想知道是否有可能访问和查看照片库中的照片,而不是实际存储在应用程序中的照片? 所以基本上应用程序将存储对所选照片的​​引用,而不是自己存储照片。 这是为了防止应用程序占用大量的空间来存储每张照片。

谢谢!

这不是那么简单,但像Rob提到的那样,您可以保存照片素材资源url,然后使用Photos框架获取它。 您可以使用PHImageManager方法requestImageData来获取它们。

 import UIKit import Photos class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet weak var imageView: UIImageView! let galleryPicker = UIImagePickerController() // create a method to fetch your photo asset and return an UIImage on completion func fetchImage(asset: PHAsset, completion: @escaping (UIImage) -> ()) { let options = PHImageRequestOptions() options.version = .original PHImageManager.default().requestImageData(for: asset, options: options) { data, uti, orientation, info in guard let data = data, let image = UIImage(data: data) else { return } self.imageView.contentMode = .scaleAspectFit self.imageView.image = image print("image size:", image.size) completion(image) } } override func viewDidLoad() { super.viewDidLoad() // lets add a selector to when the user taps the image let tap = UITapGestureRecognizer(target: self, action: #selector(openPicker)) imageView.isUserInteractionEnabled = true imageView.addGestureRecognizer(tap) } // opens the image picker for photo library func openPicker() { galleryPicker.sourceType = .photoLibrary galleryPicker.delegate = self present(galleryPicker, animated: true) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // check if there is an url saved in the user defaults // and fetch its first object (PHAsset) if let url = UserDefaults.standard.url(forKey: "assetURL"), let asset = PHAsset.fetchAssets(withALAssetURLs: [url], options: PHFetchOptions()).firstObject { fetchImage(asset: asset) { self.imageView.image = $0 } } } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true) print("canceled") } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let url = info[UIImagePickerControllerReferenceURL] as? URL, let image = info[UIImagePickerControllerOriginalImage] as? UIImage { UserDefaults.standard.set(url, forKey: "assetURL") print("url saved") self.imageView.image = image } dismiss(animated: true) } } 

注意:不要忘记编辑你的信息plist,并添加“隐私 – 图片库使用说明”

样品