Ricerca…


Modo più semplice

Il modo più semplice per crearlo è usare Alamofire e la sua UIImageViewExtension . Quello di cui abbiamo bisogno è una vista tabella con una cella che abbia un imageView al suo interno e che la chiami imageView .

Nella cellaForRowAt: funzione di tableView dovremmo scaricare l'immagine e impostarla nel seguente modo:

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

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

L'url dovrebbe puntare all'immagine che vuoi scaricare e l'immagine placeHolder dovrebbe essere un'immagine memorizzata. Chiamiamo quindi il metodo af_setImage su imageView che scarica l'immagine imageView specificato e durante il download verrà mostrata l'immagine del segnaposto. Non appena viene scaricata l'immagine, viene visualizzata l'immagine richiesta

Verifica che la cella sia ancora visibile dopo il download

A volte il download richiede più tempo rispetto a quando la cella viene visualizzata. In questo caso può succedere che l'immagine scaricata sia mostrata nella cella sbagliata. Per risolvere questo problema non possiamo usare l' estensione UIImageView .

Useremo comunque Alamofire, tuttavia useremo il gestore di completamento per visualizzare l'immagine.

In questo scenario abbiamo ancora bisogno di una tabellaView con una cella che ha un imageView in esso. Nel cellForRowAt: metodo dovremmo scaricare l'immagine con il seguente codice:

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
    }
}

In questo esempio, per prima cosa impostiamo l'immagine sull'immagine segnaposto. Successivamente scarichiamo l'immagine con il metodo di request di Alamofire . Passiamo l'url come primo argomento e dal momento che vogliamo solo ottenere l'immagine useremo il metodo HTTP .get . Dal momento che stiamo scaricando un'immagine vogliamo che la risposta sia un'immagine, quindi usiamo il metodo .responseImage .

Dopo che l'immagine è stata scaricata, la chiusura viene chiamata e prima di tutto ci assicuriamo che l'immagine scaricata esista effettivamente. Quindi ci assicuriamo che la cella sia ancora visibile controllando che cellForRow (a: indexPath) non restituisca nulla. Se non succede nulla, se non lo facciamo assegniamo l'immagine scaricata di recente.

Quest'ultima istruzione if garantisce che la cella sia ancora visibile se l'utente ha già fatto scorrere la cella, l'updateCell sarà nullo e l'istruzione if restituirà zero. Questo ci aiuta a prevenire la visualizzazione dell'immagine sbagliata in una cella.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow