从手机照片库swift 5中获取1000张图像的最佳方法

我正在尝试创建一个具有上传图片功能的应用。我想创建一个加载所有图像的屏幕,该图像可能是照片库中的1000多个图像。然后将所有这些加载到“收集”视图中,并按日期进行排序和分组。

我尝试了批量加载,但无法正常工作,它仅加载第一批。还有其他方法可以做到这一点吗?我可以参考任何教程吗?

 var myCollectionView: UICollectionView!
    var photosDict = Dictionary<String,[Photo]>()
    var photoAssets: PHFetchResult<PHAsset>?
    let itemsPerBatch = 20
    var batchNumber = 0

   func grabPhotos() {
        DispatchQueue.global(qos: .background).async {
            let imgManager=PHImageManager.default()

            let requestOptions=PHImageRequestOptions()
            requestOptions.isSynchronous=true
            requestOptions.deliveryMode = .highQualityFormat

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

            self.photoAssets = PHAsset.fetchAssets(with: .image,options: fetchOptions)

            self.loadmorePhotos(imgManager: imgManager,requestOptions: requestOptions)

            self.batchNumber = self.batchNumber + 1
        }
    }


    func loadmorePhotos(imgManager: PHImageManager,requestOptions: PHImageRequestOptions) {
        photosDict.removeAll()
        let formatter = DateFormatter()
        formatter.dateFormat = "dd-MMM-yyyy"

        if let photoAssetsUW = self.photoAssets,photoAssetsUW.count > 0 {
            print(photoAssetsUW)
            print(photoAssetsUW.count)
            for i in (self.batchNumber * self.itemsPerBatch)..<(self.itemsPerBatch * (self.batchNumber + 1)) {
                if i < photoAssetsUW.count {
                    let photoAsset = photoAssetsUW.object(at: i)
                    if let creationDate = photoAsset.creationDate {
                        let stringDate = formatter.string(from: creationDate)
                        var imageURL: String = ""
                        photoAsset.requestContentEditingInput(with: PHContentEditingInputRequestOptions()) { (eidtingInput,info) in
                            if let input = eidtingInput,let imgURL = input.fullSizeImageURL {
                                imageURL = imgURL.absoluteString
                            }
                        }

                        imgManager.requestImage(for: photoAssetsUW.object(at: i),targetSize: CGSize(width:500,height: 500),contentMode: .aspectFill,options: requestOptions,resultHandler: { (image,error) in
                            if let imageUW = image {
                                if self.photosDict[stringDate] == nil {
                                    self.photosDict[stringDate] = [Photo(image: imageUW,imagePath: imageURL)]
                                } else {
                                    self.photosDict[stringDate]?.append(Photo(image: imageUW,imagePath: imageURL))
                                }
                            }
                        })
                    }
                }
            }
        } else {
            print("You got no photos.")
        }
        print("photosDict count: \(self.photosDict.count) \(self.photosDict)")

        DispatchQueue.main.async {
            self.myCollectionView.reloadData()
        }
    }

 func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let keys = Array(photosDict.keys).sorted(by: <)
        let currentKey = keys[indexPath.section]
        let imageList = photosDict[currentKey]
        if indexPath.row == imageList?.count {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell",for: indexPath) as! PhotoItemCell

            let requestOptions=PHImageRequestOptions()
            requestOptions.isSynchronous=true
            requestOptions.deliveryMode = .highQualityFormat

            loadmorePhotos(imgManager: PHImageManager.default(),requestOptions: requestOptions)
            return cell
        }


        let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "Cell",for: indexPath) as! PhotoItemCell
        cell.img.image = imageList?[indexPath.row].image
        return cell
    }

我想创建一个看起来与Apple Photos应用程序完全一样的屏幕,并加载来自该应用程序的所有图像和视频。

yaoyuan_1111 回答:从手机照片库swift 5中获取1000张图像的最佳方法

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3154339.html

大家都在问