如何为从Photos Framework中提取的PHAsset添加分页?

Get*_*tMe 1 ios swift photosframework phasset ios11

我正在尝试使用Photos框架从cameraRoll获取所有照片,但它花了很多时间从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()
                    }
                }

            })

        })
    }
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*ann 5

allPhotos是类型的PHFetchResult <PHAsset>这是一个懒惰的集合,即它实际上并没有走出去,直到你问一个,这是得到的照片.enumerateObjects做.您可以使用下标操作符一次一个地抓取照片,或者获取一系列带有对象的对象(at :)以根据需要翻阅集合.