PHPickerViewController โหลดวิดีโอผ่าน PHAsset

Oct 06 2020

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 ควรโหลดเนื้อหาเหล่านั้นโดยตรง มีการหลีกเลี่ยงการอนุญาตคลังรูปภาพหรือไม่?

คำตอบ

2 matt Oct 06 2020 at 15:21

มีการหลีกเลี่ยงการอนุญาตคลังรูปภาพหรือไม่?

ใช่ประเภท:

  1. เปลี่ยนPHPickerConfiguration(photoLibrary: photolibrary)เป็นPHPickerConfiguration()

  2. ไม่ได้ใช้assetIdentifierเพื่อกลับไปยังห้องสมุดภาพ (มันจะเป็นnilอยู่แล้ว)

ในกรณีนี้ผู้ใช้สามารถให้ข้อมูลรูปภาพแก่คุณได้ แต่นั่นคือทั้งหมด เครื่องมือเลือกไม่อยู่ในกระบวนการและไม่มีข้อมูลใด ๆ จากไลบรารีในตัวมันเป็นเพียงภาพที่ผู้ใช้เลือกไว้อย่างชัดเจน

อย่างไรก็ตามหากเป้าหมายของคุณคือการกลับไปที่ไลบรารีรูปภาพและขอรับ PHAsset คุณจะต้องได้รับอนุญาตเนื่องจากตอนนี้คุณกำลังพยายามตรวจสอบคลังภาพเบื้องหลังภายในแอปของคุณ

สิ่งที่ฉันทำเมื่อแอปของฉันขึ้นอยู่กับข้อมูล PHAsset คือการขออนุญาตคลังรูปภาพ (ถ้าจำเป็น) ก่อนที่จะนำเสนอตัวเลือกและฉันจะไม่นำเสนอตัวเลือกหากฉันไม่ได้รับอนุญาต ดังนั้นผู้ใช้จึงแตะปุ่มฉันพบว่าเราไม่มีสิทธิ์ฉันขออนุญาตเราได้รับมัน (สมมติว่า) และฉันนำเสนอตัวเลือก (ทำการเต้นแบบอะซิงโครนัสเนื่องจากการอนุญาตมาถึงแบบอะซิงโครนัส) ดูดี.

อย่างไรก็ตามนี่ก็เป็นเช่นเดียวกับ UIImagePickerController