5 votes

Comment récupérer le PHAsset de PHPicker ?

Sur WWDC20 pomme introduite PHPicker - le remplacement moderne de UIImagePickerController.
Je me demande s'il est possible de récupérer le PHAsset en utilisant le nouveau sélecteur de photos ?

Voici mon code :

 private func presentPicker(filter: PHPickerFilter) {
        var configuration = PHPickerConfiguration()
        configuration.filter = filter
        configuration.selectionLimit = 0

        let picker = PHPickerViewController(configuration: configuration)
        picker.delegate = self
        present(picker, animated: true)
    }

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        dismiss(animated: true)

    }

18voto

0xBFE1A8 Points 1414

J'ai réussi à trouver une réponse des développeurs de ce cadre sur le site de la forum de la pomme :

Oui, PHPickerResult a la propriété assetIdentifier qui peut contenir un identifiant local pour aller chercher le PHAsset dans la bibliothèque. Pour que PHPicker renvoie les identifiants des actifs, vous devez initialiser PHPickerConfiguration avec la bibliothèque.

Veuillez noter que PHPicker ne prolonge pas la bibliothèque de photos limitée. pour les éléments sélectionnés si l'utilisateur met votre application en mode Photothèque limitée. Photos Library. Ce serait une bonne occasion de reconsidérer si l'application a vraiment besoin d'un accès direct à la photothèque ou peut travailler avec seulement les données d'image et de vidéo. Mais cela dépend vraiment de l'application.

La section correspondante de la session "Rencontre avec le nouveau sélecteur de photos". commence à 10m 20s .

Un exemple de code pour l'accès à PhotoKit ressemble à ceci :

import UIKit
import PhotosUI
class PhotoKitPickerViewController: UIViewController, PHPickerViewControllerDelegate {
        @IBAction func presentPicker(_ sender: Any) {
                let photoLibrary = PHPhotoLibrary.shared()
                let configuration = PHPickerConfiguration(photoLibrary: photoLibrary)
                let picker = PHPickerViewController(configuration: configuration)
                picker.delegate = self
                present(picker, animated: true)
        }

        func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
                picker.dismiss(animated: true)

                let identifiers = results.compactMap(\.assetIdentifier)
                let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: identifiers, options: nil)

                // TODO: Do something with the fetch result if you have Photos Library access
        }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X