PHPickerViewController memuat video melalui PHAsset
PHPickerViewController memungkinkan akses ke salinan aset pustaka foto serta mengembalikan PHAsset dalam hasil. Untuk mendapatkan PHAssets alih-alih salinan file, saya lakukan:
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)
Lalu,
//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)")
}
}
Tetapi masalahnya adalah setelah pemilih foto ditutup, ia meminta akses Perpustakaan Foto yang membingungkan dan karena pengguna secara implisit memberikan akses ke aset yang dipilih di PHPickerViewController, PHPhotoLibrary harus memuat aset tersebut secara langsung. Apakah ada cara untuk menghindari izin perpustakaan Foto?
Jawaban
Apakah ada cara untuk menghindari izin perpustakaan Foto?
Ya, semacam:
Ganti
PHPickerConfiguration(photoLibrary: photolibrary)kePHPickerConfiguration()Jangan tidak menggunakan
assetIdentifieruntuk kembali ke perpustakaan foto (akannilpula)
Dalam hal ini, pengguna dapat memberi Anda data gambar tetapi itu saja. Alat pilih sedang dalam proses dan tidak ada data dari pustaka itu sendiri yang benar-benar muncul, hanya gambar belaka yang telah dipilih pengguna secara eksplisit.
Namun, jika tujuan Anda benar - benar adalah kembali ke perpustakaan foto dan mendapatkan PHAsset, maka Anda harus memiliki izin, karena Anda sekarang benar-benar mencoba untuk menyelidiki perpustakaan foto di balik layar dalam aplikasi Anda.
Apa yang saya lakukan, saat aplikasi saya bergantung pada informasi PHAsset, adalah meminta izin perpustakaan foto (jika perlu) sebelum menampilkan alat pilih, dan saya tidak menampilkan alat pilih jika saya tidak bisa mendapatkan izin. Jadi, pengguna mengetuk tombol, saya menemukan kami tidak memiliki izin, saya meminta izin, kami mendapatkannya (katakanlah), dan saya menyajikan pemetik (melakukan tarian asinkron, karena izin datang secara asinkron). Tampak hebat.
Omong-omong, ini juga berlaku untuk UIImagePickerController.