Quiero configurar la imagen con UIImage directamente y no desde ninguna fuente, recurso. Ya tengo mi imagen y quiero configurarla con almacenamiento en caché en mi imageView.
let myImage = UIImage kingfisherView.kf.setImage(with: myImage)quiero que esto se haga como configuré la imagen en UIImageView, es decir
UIImageView.image = myImagePero con el almacenamiento en caché
no estoy descargando imágenes de una fuente, las estoy generando yo mismo (Latex). y almacenarlos en caché con
let cache = ImageCache.default cache.store(renderedLaTeX ?? UIImage(), forKey: "image\(indexPath.row)")Solo quiero configurar esa imagen en caché en mi imageView.
UIImage.image = cachedImage
no funciona y carga la imagen una y otra vez a medida que me desplazo hacia arriba y hacia abajo en CollectionViewCell
O cualquier otra forma de hacer esto para que no tenga que cargar imageView con una imagen una y otra vez. Mi ImageView está dentro UICollectionViewCell
Puede almacenar una imagen ya existente en la memoria caché de Kingfisher:
let image: UIImage = //... ImageCache.default.store(image, forKey: cacheKey) Por defecto, Kingfisher usa url.absoluteString como cacheKey .
Entonces, si ya descargó una imagen de algún lugar y aún tiene esta URL, puede almacenarla en caché usted mismo y la próxima vez Kingfisher no descargará la imagen, sino que usará una almacenada en caché.
Si solo desea almacenar en caché sin descargar, puede recuperar la imagen de la siguiente manera:
cache.retrieveImage(forKey: "cacheKey") { result in switch result { case .success(let value): print(value.cacheType) // If the `cacheType is `.none`, `image` will be `nil`. print(value.image) case .failure(let error): print(error) } }Pero como lo usa dentro de la vista de colección, asegúrese de dejar de cargar en la reutilización de collectionViewCell
Ejemplo en celda:
Almacenamos imageKey dentro de la celda y cuando Cache nos devuelve la imagen, nos aseguramos de que la celda aún no se haya reutilizado y aún necesite esta imagen. Si la celda se reutiliza, entonces en prepareToReuse() eliminamos imageKey almacenada
class LatexCell: UICollectionViewCell { @IBOutlet var formulaImageView: UIImageView! private var imageKey: String? func setup(with imageKey: String) { self.imageKey = imageKey ImageCache.default.retrieveImage(forKey: imageKey) { [weak self] result in guard self?.imageKey == imageKey else { return } // cell have been reused switch result { case .success(let value): self?.formulaImageView.image = value.image case .failure(let error): break /// no image stored, you should create new one } } } override func prepareForReuse() { super.prepareForReuse() imageKey = nil formulaImageView.image = nil // Probably want here placeholder image } }