Повторная загрузка изображений разных размеров при использовании Kingfisher

у меня есть приложение, которое работает с ответом API JSON. Просто получаю простой массив элементов. У каждого элемента есть URL-адрес с изображением в высоком разрешении. Я использую Kingfisher, чтобы получить эти изображения и изменить размер до моего размера ImageView (который размещен в моем MainView)

//MainViewController
itemImageMainVC.kf.setImage(
    with: URL(string: itemModel.artImage),
    options: [
        .processor(DownsamplingImageProcessor(size: itemImageMainVC.bounds.size) >> RoundCornerImageProcessor(cornerRadius: 16, targetSize: itemImageMainVC.bounds.size)),
        .scaleFactor(UIScreen.main.scale),
        .transition(.fade(0.2)),
        .cacheOriginalImage
    ])

Здесь все в порядке, у меня есть изображения в MainView внутри TableView, и они хорошо кэшируются. НО! Если я попытаюсь открыть и отобразить одни и те же изображения, но с разными размерами на SecondView, я увижу ту же анимацию перехода на SecondView, поэтому я предполагаю, что они начали загружаться снова, когда они не должны.

//SecondViewController
itemImageSecondVC.kf.setImage(
    with: URL(string: itemModel.artImage),
    options: [
        .processor(DownsamplingImageProcessor(size: itemImageSecondVC.bounds.size) >> RoundCornerImageProcessor(cornerRadius: 16, targetSize: itemImageSecondVC.bounds.size)),
        .scaleFactor(UIScreen.main.scale),
        .transition(.fade(0.2)),
        .cacheOriginalImage
    ])

itemImageMainVC и itemImageSecondVC имеют разные размеры.

Что я делаю не так? Я просто хочу загружать / отображать изображения в MainView и мгновенно показывать их, когда я открываю SecondView, без повторной загрузки


person Bobby Redjeans    schedule 17.09.2019    source источник


Ответы (1)


Давайте попробуем использовать cacheKey, это должен быть последний компонент пути (или событие absoluteUrlString) из URL-адреса вашего изображения или что-то уникальное.

let resource = ImageResource(downloadURL: url, cacheKey: url.lastPathComponent)
self.imageView.kf.setImage(with: resource, placeholder: UIImage(named: "placeholder-image"), options: nil, progressBlock: nil) { (result) in
    switch result {
    case .success(_):
        // Success case
    case .failure(_):
        // Failed case
    }
}
person jacob    schedule 18.09.2019
comment
Проблема была в процессоре RoundCorner. Поскольку я запрашиваю изображение другого размера - person Bobby Redjeans; 19.09.2019