Как установить смещение в PHAsset.fetchAssets?

Это мой код для загрузки изображений из галереи устройства.

let imgManager = PHImageManager.default()
    let requestOptions = PHImageRequestOptions()

    //loading all the images
    requestOptions.isSynchronous = false

    //Quality of the image
    requestOptions.deliveryMode = .highQualityFormat

    //requestOptions.resizeMode = .fast

    //Sorted images
    let fetchOptions = PHFetchOptions()
    fetchOptions.fetchLimit = 500

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

    let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)

 DispatchQueue.global(qos: .background).async {

        if fetchResult.count > 0 {

            DispatchQueue.main.async {
                self.showProgress()
            }

            for i in 0..<fetchResult.count{

                imgManager.requestImage(for: fetchResult.object(at: i) , targetSize: CGSize(width: self.selectedImage.frame.width, height:self.selectedImage.frame.height), contentMode: .aspectFill, options: requestOptions, resultHandler: {
                    image, error in

                    if(image == nil){
                    }else{
                        self.imageArray.append(image!)
                    }
                })
            }

            DispatchQueue.main.async {
                self.hideProgress()
                self.photosCollectionView.reloadData()
            }

        }else{
            self.hideProgress()
            self.showDefaultAlert(title: "Alert", message: "Could not fetch images from the gallery")

        }

У меня возникают проблемы с памятью, когда в устройстве более 1500 изображений. Я выяснил, как установить предел, как получить следующие 500 изображений, когда представление коллекции прокручивается вниз? Любая помощь приветствуется.

1 ответ

Какую проблему вы исправляете? Я думаю, тяжелая операция находится в requestImage, вы можете попробовать

fetchResult.objects(at: IndexSet(0...500))
fetchResult.objects(at: IndexSet(501...1000))

и т. д. или может быть добавить предикат

fetchOptions.predicate = NSPredicate(format: "@NOT(localIdentifier IN %@)", alreadyGettedIdentifiers)

for i in 0..<fetchResult.count{
            let fetchResult = fetchResult.object(at: i)
            alreadyGettedIdentifiers.append(fetchResult.localIdentifier)

            PHImageManager.default().requestImage(for: fetchResult, targetSize: CGSize(width: 200, height:200), contentMode: .aspectFill, options: requestOptions, resultHandler: {
                image, error in

                if(image == nil){
                }else{
                 self.imageArray.append(image!)

                }
            })
        }
Другие вопросы по тегам