Как добавить разбиение на страницы для извлечения PHAsset из Photos Framework?

Я пытаюсь получить все фотографии с cameraRoll, используя структуру Photos, но получение всех фотографий с cameraRoll занимает много времени.

Их как-нибудь добавить к нему нумерацию страниц? так что я могу получить при прокрутке.

 var images = [UIImage]()
 var assets = [PHAsset]()

fileprivate func assetsFetchOptions() -> PHFetchOptions {
    let fetchOptions = PHFetchOptions()

    //fetchOptions.fetchLimit = 40 //uncomment to limit photo

    let sortDescriptor = NSSortDescriptor(key: "creationDate", ascending: false)
    fetchOptions.sortDescriptors = [sortDescriptor]
    return fetchOptions
}

fileprivate func fetchPhotos() {
    let allPhotos = PHAsset.fetchAssets(with: .image, options: assetsFetchOptions())

    DispatchQueue.global(qos: .background).async {
        allPhotos.enumerateObjects({ (asset, count, stop) in
            //print(count)

            let imageManager = PHImageManager.default()
            let targetSize = CGSize(width: 200, height: 200)
            let options = PHImageRequestOptions()
            options.isSynchronous = true
            imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: options, resultHandler: { (image, info) in

                if let image = image {
                    self.images.append(image)
                    self.assets.append(asset)
                }

                if count == allPhotos.count - 1 {
                    DispatchQueue.main.async {
                        self.collectionView?.reloadData()
                    }
                }

            })

        })
    }
}

person GetMe4GetMe    schedule 22.12.2017    source источник
comment
Не извлекайте все фотографии за один раз. Это определенно займет больше времени по мере увеличения количества изображений в галерее. Поэтому начинайте извлекать изображения только тогда, когда они необходимы, как SDWebImages. Напишите, что вы получаете код в cellForItemAtIndexPath метода источника данных UICollectionView. ячейка получает только одно изображение.   -  person Vikky    schedule 22.12.2017
comment
Используя объекты (at :), я получаю изображения во время прокрутки. Благодарность   -  person GetMe4GetMe    schedule 25.12.2017
comment
Помогите другим, поделившись кодом   -  person Mubeen Qazi    schedule 12.10.2018


Ответы (1)


allPhotos относится к типу PHFetchResult ‹PHAsset>, который является ленивой коллекцией, т. Е. Не на самом деле идите и берите фотографию, пока вы ее не попросите, что и делает .enumerateObjects. Вы можете просто захватить фотографии по одной с помощью оператора индекса или получить диапазон объектов с помощью объектов (at :) для пролистывания сбор по мере необходимости.

person Josh Homann    schedule 22.12.2017
comment
не могли бы вы объяснить, как мы будем использовать объекты (at :) на странице - person user6520705; 08.02.2019