Как я могу получить PHAsset из PHPickerResult? iOS 14 - PullRequest
0 голосов
/ 03 августа 2020

Итак, я нашел похожие вопросы, которые задавали раньше, но когда я попробовал тот же способ, что и получил, и он не работает так, как я ожидал, я пытаюсь получить PHAsset из PHPickerResult из PHPickerViewController.

, поэтому экспериментируем с ним, используя этот исходный в качестве моего базового кода, и объединил его с тем, что я получил от этого .

также уже добавил «Конфиденциальность - описание использования библиотеки фотографий» в info.plist, когда я пробовал это.

Код выглядит следующим образом.


import UIKit
import PhotosUI

class ViewController: UIViewController {
    
    @IBOutlet weak var myImageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func buttonDidTap(_ sender: Any) {
        var configuration = PHPickerConfiguration()
        configuration.selectionLimit = 1
        configuration.filter = .any(of: [.images, .videos])
        
        let picker = PHPickerViewController(configuration: configuration)
        picker.delegate = self
        self.present(picker, animated: true, completion: nil)
    }
}

extension ViewController: PHPickerViewControllerDelegate {
    
    func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        
        picker.dismiss(animated: true)
        let identifiers = results.compactMap(\.assetIdentifier)
        let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: identifiers, options: nil)
        fetchResult.enumerateObjects { (asset, index, stop) -> Void in
            PHImageManager.default().requestImage(for: asset,
                                                  targetSize: CGSize.init(width: 20, height: 20),
                                                  contentMode: PHImageContentMode.aspectFit,
                                                  options: nil) { (image: UIImage?, _: [AnyHashable : Any]?) in
                self.myImageView.image = image
            }
       }
    }
}

После того, как я попытался отладить код, я обнаружил что код внутри fetchResult.enumerateObjects не был вызван, поэтому я не могу получить изображение.

Или, может быть, я ошибся синтаксисом? кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 13 августа 2020

Если вам понадобится актив позже, вы должны инициализировать конфигурацию с помощью библиотеки фотографий. Итак, эта строка неверна:

var configuration = PHPickerConfiguration()

Вы хотите:

var configuration = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared())
...