Buscar..


La manera más fácil

La forma más sencilla de crear esto es usar Alamofire y su UIImageViewExtension . Lo que necesitamos es una vista de tabla con una celda que tenga una imageView en ella y la llamemos imageView .

En la función cellForRowAt: de tableView, descargamos la imagen y la configuramos de la siguiente manera:

let url = URL(string: "https://httpbin.org/image/png")!
let placeholderImage = UIImage(named: "placeholder")!

imageView.af_setImage(withURL: url, placeholderImage: placeholderImage)

La URL debe apuntar a la imagen que desea descargar y la imagen placeHolder debe ser una imagen almacenada. Luego, llamamos al método af_setImage en el imageView que descarga la imagen en la url dada y durante la descarga se mostrará la imagen del marcador de posición. Tan pronto como se descarga la imagen, se muestra la imagen solicitada.

Comprueba que la celda sigue siendo visible después de la descarga.

A veces, la descarga tarda más de lo que se muestra la celda. En este caso, puede suceder que la imagen descargada se muestre en la celda incorrecta. Para solucionar esto no podemos usar la extensión UIImageView .

Seguiremos usando Alamofire, sin embargo, usaremos el controlador de finalización para mostrar la imagen.

En este escenario, todavía necesitamos una tableView con una celda que tenga una imageView en ella. En el método cellForRowAt: descargaríamos la imagen con el siguiente código:

let placeholderImage = UIImage(named: "placeholder")!
imageView.image = placeholderImage

let url = URL(string: "https://httpbin.org/image/png")!

Alamofire.request(url!, method: .get).responseImage { response in
    guard let image = response.result.value else { return }

    if let updateCell = tableView.cellForRow(at: indexPath) {
        updateCell.imageView.image = image
    }
}

En este ejemplo, primero configuramos la imagen a la imagen de marcador de posición. Posteriormente descargamos la imagen con el método de request de Alamofire . Pasamos la url como primer argumento y, como solo queremos obtener la imagen, usaremos el método HTTP .get . Como estamos descargando una imagen, queremos que la respuesta sea una imagen, por lo tanto, usamos el método .responseImage .

Después de que se haya descargado la imagen, se llama al cierre y, en primer lugar, nos aseguramos de que la imagen descargada exista realmente. Luego, nos aseguramos de que la celda aún esté visible al verificar que cellForRow (at: indexPath) no devuelve nil. Si no hace nada, si no, asignamos la imagen descargada recientemente.

Esta última declaración if asegura que la celda aún estará visible si el usuario ya ha desplazado sobre la celda, el updateCell será nulo y la instrucción if devuelve nil. Esto nos ayuda a evitar mostrar la imagen incorrecta en una celda.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow