Сache images one by one passing them into an array (Kingfisher)

Viewed 24

I have to cache images one by one passing them into an array. When I configure Controller, I got array of images from API. Images I got using Animation, every 0.1 sec I got new Image. But when I got all of them, I need to use cached images instead of load them again

Some variables for help

private var imagesCount = 0
    private var nextImage = 0
    private var imagesArray: [String] = []
    private var isAnimating = true {
        didSet {
            if isAnimating {
                animateImage()
            }
        }
    }

Here I configure VC, and do imagesArray = images, then I will use only my array of urls

func configureView(images: ApiImages) {
        guard let images = images.images else { return }
        imagesArray = images
        imagesCount = images.count
        imageView.setImage(imageUrl: images[nextImage])
        nextImage += 1
        animateImage()
    }

When I start my animation. Every 0.1 I get new one image, but after the end of cycle I want to use cached images

func animateImage() {
        UIView.transition(with: self.imageView, duration: 0.1, options: .transitionCrossDissolve) { [weak self] in
            guard let self = self else { return }
            self.imageView.setImage(imageUrl: self.imagesArray[self.nextImage])
        } completion: { [weak self] _ in
            guard let self = self else { return }
            if self.nextImage == self.imagesCount - 1{
//here is end of cycle
                self.nextImage = 0
            } else {
                self.nextImage += 1
            }
            if self.isAnimating {
                self.animateImage()
            }
        }
    }

I use kingfisher, so what options I have to put here??

extension UIImageView {
    func setImage(imageUrl: String, completion: (() -> ())? = nil) {
        self.kf.setImage(with: URL(string: imageUrl), options: [.transition(.fade(0.5)), .alsoPrefetchToMemory]) { result in
            completion?()
        }
    }
}

Thank you!

0 Answers
Related