PHPickerViewController lädt Videos über PHAsset
PHPickerViewController ermöglicht den Zugriff auf Kopien von Fotobibliotheks-Assets sowie die Rückgabe von PHAssets in den Ergebnissen. Um PHAssets anstelle von Dateikopien zu erhalten, gehe ich wie folgt vor:
let photolibrary = PHPhotoLibrary.shared()
var configuration = PHPickerConfiguration(photoLibrary: photolibrary)
configuration.filter = .videos
configuration.selectionLimit = 0
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = self
self.present(picker, animated: true, completion: nil)
Und dann,
//MARK:- PHPickerViewController delegate
@available(iOS 14, *)
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true) {
let identifiers:[String] = results.compactMap(\.assetIdentifier)
let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: identifiers, options: nil)
NSLog("\(identifiers), \(fetchResult)")
}
}
Das Problem besteht jedoch darin, dass die Fotoauswahl nach dem Entlassen zur Eingabe des Zugriffs auf die Fotobibliothek führt, was verwirrend ist. Da der Benutzer ohnehin implizit Zugriff auf die ausgewählten Assets in PHPickerViewController gewährt hat, sollte PHPhotoLibrary diese Assets direkt laden. Gibt es überhaupt eine Möglichkeit, die Erlaubnis der Fotobibliothek zu umgehen?
Antworten
Gibt es überhaupt eine Möglichkeit, die Erlaubnis der Fotobibliothek zu umgehen?
Mehr oder weniger:
Wechseln Sie
PHPickerConfiguration(photoLibrary: photolibrary)zuPHPickerConfiguration()Sie nicht die Verwendung
assetIdentifierauf die Foto - Bibliothek zurückzukehren (es wirdnilsowieso)
In diesem Fall kann der Benutzer Ihnen Bilddaten geben, aber das ist alles. Die Auswahl ist nicht in Bearbeitung und es werden keine Daten aus der Bibliothek selbst angezeigt, sondern nur ein Bild, das der Benutzer explizit ausgewählt hat.
Allerdings, wenn Ihr Ziel wirklich ist , um die Foto - Bibliothek zurückzukehren und die PHAsset zu erhalten, dann Sie müssen die Berechtigung haben, wie Sie jetzt in der Tat versuchen , die Foto - Bibliothek hinter den Kulissen in Ihrer App zu sondieren.
Wenn meine App von PHAsset-Informationen abhängt, frage ich vor der Präsentation des Pickers nach der Erlaubnis der Fotobibliothek (falls erforderlich). Wenn ich keine Erlaubnis erhalten kann , stelle ich den Picker nicht vor. Wenn der Benutzer auf eine Schaltfläche tippt, stelle ich fest, dass wir keine Berechtigung haben. Ich bitte um Erlaubnis, wir erhalten sie (sagen wir) und ich präsentiere den Picker (mache den asynchronen Tanz, weil die Berechtigung asynchron eintrifft). Sieht großartig aus.
Dies gilt übrigens auch für UIImagePickerController.