PHPickerViewController โหลดวิดีโอผ่าน PHAsset
PHPickerViewController อนุญาตให้เข้าถึงสำเนาของเนื้อหาไลบรารีรูปภาพและส่งคืน PHAssets ในผลลัพธ์ ในการรับ PHAssets แทนการคัดลอกไฟล์ฉันทำ:
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)
แล้ว,
//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)")
}
}
แต่ปัญหาคือเมื่อปิดตัวเลือกรูปภาพแล้วระบบจะแจ้งให้เข้าถึงไลบรารีรูปภาพซึ่งทำให้เกิดความสับสนและเนื่องจากผู้ใช้ให้สิทธิ์เข้าถึงเนื้อหาที่เลือกใน PHPickerViewController โดยปริยาย PHPhotoLibrary ควรโหลดเนื้อหาเหล่านั้นโดยตรง มีการหลีกเลี่ยงการอนุญาตคลังรูปภาพหรือไม่?
คำตอบ
มีการหลีกเลี่ยงการอนุญาตคลังรูปภาพหรือไม่?
ใช่ประเภท:
เปลี่ยน
PHPickerConfiguration(photoLibrary: photolibrary)เป็นPHPickerConfiguration()ไม่ได้ใช้
assetIdentifierเพื่อกลับไปยังห้องสมุดภาพ (มันจะเป็นnilอยู่แล้ว)
ในกรณีนี้ผู้ใช้สามารถให้ข้อมูลรูปภาพแก่คุณได้ แต่นั่นคือทั้งหมด เครื่องมือเลือกไม่อยู่ในกระบวนการและไม่มีข้อมูลใด ๆ จากไลบรารีในตัวมันเป็นเพียงภาพที่ผู้ใช้เลือกไว้อย่างชัดเจน
อย่างไรก็ตามหากเป้าหมายของคุณคือการกลับไปที่ไลบรารีรูปภาพและขอรับ PHAsset คุณจะต้องได้รับอนุญาตเนื่องจากตอนนี้คุณกำลังพยายามตรวจสอบคลังภาพเบื้องหลังภายในแอปของคุณ
สิ่งที่ฉันทำเมื่อแอปของฉันขึ้นอยู่กับข้อมูล PHAsset คือการขออนุญาตคลังรูปภาพ (ถ้าจำเป็น) ก่อนที่จะนำเสนอตัวเลือกและฉันจะไม่นำเสนอตัวเลือกหากฉันไม่ได้รับอนุญาต ดังนั้นผู้ใช้จึงแตะปุ่มฉันพบว่าเราไม่มีสิทธิ์ฉันขออนุญาตเราได้รับมัน (สมมติว่า) และฉันนำเสนอตัวเลือก (ทำการเต้นแบบอะซิงโครนัสเนื่องจากการอนุญาตมาถึงแบบอะซิงโครนัส) ดูดี.
อย่างไรก็ตามนี่ก็เป็นเช่นเดียวกับ UIImagePickerController