dimanche 12 juin 2016

App crashes when I try to display user's Photo Library in UICollectionView


My ViewController looks like: Camera View on top and Photo Gallery on the bottom, like in Instagram.

When I try to load user's image library and display it on UICollectionView, app crashes with the Memory Warning. How can I prevent it and improve my function?

My function:

func getImagesFromLibrary(from: Int = 0, to: Int = 5, completion: (loaded: Bool) -> Void) {
    if images.count > 0 {
        for i in from..<to {
            let asset: PHAsset = self.images[i] as! PHAsset
            let imageFetchOptions = PHImageRequestOptions()

            self.imageManager.requestImageForAsset(asset, targetSize: CGSize(width: 75, height: 75), contentMode: .AspectFit, options: imageFetchOptions, resultHandler: { (image: UIImage?, info: [NSObject : AnyObject]?) in
                if (image != nil) {
                    if let img = image {
                        self.croppedImagesArray[i] = img
                        self.imagesCollectionView.reloadData()
                    }
                }
            })
        }

        completion(loaded: true)
    } else {
        print("Images Empty")
    }
}

and I call it via:

        if AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) ==  AVAuthorizationStatus.Authorized {
        print("GRANTED")
        self.getImagesFromLibrary { (loaded) in
            if loaded {
                print("Images Count: (self.images.count)")

                if self.images.count > 5 {
                    print("Second part")
                    self.getImagesFromLibrary(5, to: self.images.count / 2, completion: { (loaded) in
                        if loaded {
                            self.getImagesFromLibrary(self.images.count / 2, to: self.images.count, completion: { (loaded) in })
                        }
                    })
                }
            }
        }
    }

So, now I have in my gallery 300 images. It's a lot and that's why my app crashes on loading process.

How can I solve it? Any solutions?


Aucun commentaire:

Enregistrer un commentaire