Проверьте фотоактивы на соответствие URL - PullRequest
0 голосов
/ 18 мая 2018

У меня есть массив URL-адресов изображений, выбранных пользователем из библиотеки фотографий.Существует ли быстрый способ получить эти ресурсы (их никогда не будет больше 5) из библиотеки фотографий, не просматривая все фотографии пользователей (что в моем тесте действительно медленно).

Вот кодЯ использую сейчас:

func loadCollectionView() {

    arrImageViews.removeAll()

    let options = PHFetchOptions()
    //options.predicate = NSPredicate(format: "favorite == YES")
    options.sortDescriptors = [
        NSSortDescriptor(key: "creationDate", ascending: true)
    ]

    let results = PHAsset.fetchAssets(with: .image, options: options)
    var assets: [PHAsset] = []
    results.enumerateObjects { (object, _, _) in
        if let asset = object as? PHAsset {
            assets.append(asset)
        }
    }

    let manager = PHImageManager.default()


    for thisAsset in assets {

        thisAsset.getPHAssetURL(completionHandler: {(assetURL) in
            if let strAssetURL = assetURL?.absoluteString {
                if self.arrImagePaths.contains(strAssetURL) {

                    manager.requestImage(for: thisAsset, targetSize: CGSize(width: 80.0, height: 80.0), contentMode: .aspectFit, options: nil, resultHandler: {(thisImage, _) in
                        self.arrImageViews.append(UIImageView(image: thisImage))
                        self.cImages.reloadData()
                    })

                }
            }

        })

    }



}

getPHAssetURL - это расширение, которое извлекает URL из ресурса.

Итак, я ищу совпадение между assetURL?.absoluteString и строками в моем массиве.

1 Ответ

0 голосов
/ 18 мая 2018

После проверки документов , я думаю, что если вы хотите получить информацию только об одном выбранном PHAsset, вы можете попробовать это:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    guard let asset = info[UIImagePickerControllerPHAsset] as? PHAsset else { return }
    let localId = asset.localIdentifier
    //Save this variable in your model.
}

Если вы реализовали несколько-выделение фотографии в просмотре коллекции, вам нужно будет проверить их документы, чтобы увидеть, как получить PHAssets для выбранного носителя.Но это должно быть довольно просто.

Тогда с вашим var localIds: [String] вы можете попробовать это:

let options = PHFetchOptions()
options.sortDescriptors = [
    NSSortDescriptor(key: "creationDate", ascending: true)
]
let results = PHAsset.fetchAssets(withLocalIdentifiers: localIds, options: options)

Обратите внимание, что вы можете выполнять дополнительную фильтрацию с предикатами в вашем запросе на выборку на основе ключей здесь .

...