Swift照片库访问

Swift照片库访问,第1张

Swift照片库访问

它不是那么简单,但是正如Rob所提到的,您可以保存照片资产url,然后使用Photos框架来获取它。您可以使用PHImageManager方法requestImageData获取它们。

import UIKitimport Photosclass 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    override func viewDidLoad() {        super.viewDidLoad()        // lets add a selector to when the user taps the image        imageView.isUserInteractionEnabled = true        imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(openPicker)))        // request authorization        switch PHPhotoLibrary.authorizationStatus() {        case .authorized: print("The user has explicitly granted your app access to the photo library.") return        case .denied: print("The user has explicitly denied your app access to the photo library.")        case .notDetermined: PHPhotoLibrary.requestAuthorization { status in     print("status", status) }        case .restricted: print("Your app is not authorized to access the photo library, and the user cannot grant such permission.")        default: break        }    }    // opens the image picker for photo library    @objc func openPicker(_ gesture: UITapGestureRecognizer) {        galleryPicker.sourceType = .photoLibrary        galleryPicker.delegate = self        present(galleryPicker, animated: true)    }    override func viewDidAppear(_ animated: Bool) {        super.viewDidAppear(animated)        self.imageView.contentMode = .scaleAspectFit        // check if there is an url saved in the user defaults        // and fetch its first object (PHAsset)        if let assetURL = UserDefaults.standard.url(forKey: "assetURL") { if let asset = PHAsset.fetchAssets(withALAssetURLs: [assetURL], options: nil).firstObject {     asset.asyncImageData { data, _, _, _ in         print("fetched")         guard let data = data else { return }         self.imageView.image = UIImage(data: data)     } } else {     print("assetURL:", assetURL)     self.imageView.image = UIImage(contentsOfFile: assetURL.path) }        } else { print("no assetURL found")        }    }    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {        dismiss(animated: true)        print("canceled")    }    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {        self.imageView.image = info[.originalImage] as? UIImage        if let phAsset = info[.phAsset] as? PHAsset { phAsset.asyncURL { url in     guard let url = url else { return }     UserDefaults.standard.set(url, forKey: "assetURL")     print("assetURL saved") }        }        dismiss(animated: true)    }}

extension PHAsset {    func asyncURL(_ completion: @escaping ((URL?) -> Void)) {        switch mediaType {        case .image: let options: PHContentEditingInputRequestOptions = .init() options.canHandleAdjustmentData = { _ in true } requestContentEditingInput(with: options) { editingInput, _ in     completion(editingInput?.fullSizeImageURL) }        case .video: let options: PHVideoRequestOptions = .init() options.version = .original PHImageManager.default()     .requestAVAsset(forVideo: self, options: options) { asset, _, _ in     completion((asset as? AVURLAsset)?.url) }        default: completion(nil)        }    }    func asyncImageData(version: PHImageRequestOptionsVersion = .original, completion: @escaping  (Data?, String?, UIImage.Orientation, [AnyHashable : Any]?) -> ()) {        let options = PHImageRequestOptions()        options.version = version        PHImageManager.default() .requestImageData(for: self, options: options, resultHandler: completion)    }}extension URL {    var phAsset: PHAsset? {        PHAsset.fetchAssets(withALAssetURLs: [self], options: nil).firstObject    }}

注意:不要忘记编辑您的信息列表并添加“隐私-照片库使用说明

样品



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5642207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存