Per evitare rallentamenti durante il caricamento di una UITableView con immagini è necessario caricare un placeholder (quindi un immagine già presente negli asset) e poi lanciare un thread per caricare l’immagine da internet cosi da non rallentare lo scroll.
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
...
UIImage cachedImage = item.immagine_evento;
if (cachedImage == null) {
ThreadPool.QueueUserWorkItem ((t) => {
// retrive the image and create a local scaled thumbnail; return a UIImage object of the thumbnail
//cachedImage = ricetteImages.GetImage(entry.Immagine, true) ?? Placeholder;
cachedImage = FromUrl (item.url_immagine) ?? Placeholder;
InvokeOnMainThread (() => {
// if we are on a wrong row, don’t assign the image, the cell could have been already reused!
//if (cell.Tag != (nint)indexPath.Row) return;
// assign the image and animate a fade in
//cell.Immagine.Alpha = 0;
cell.setImageAlpha (0);
cell.setImage (cachedImage);
//UIView.Animate (0.3, () => { cell.Immagine.Alpha = 1; });
UIView.Animate (0.3, () => {
cell.setImageAlpha (1);
});
item.immagine_evento=cachedImage;
});
});
} else {
cell.setImage (cachedImage);
}
Dentro la funzione che fa a definire la cella, quindi appena viene creata una cella dinamicamente andiamo a verificare se l’immagine è già cachata o no (item.immagine_evento è un oggetto UIImage dove viene salvata l’immagine una volta scaricata)
Placeholder invece è un oggetto UIImage definito nel costruttore dell’oggetto che inizializza con un immagine già dentro gli asset.
Invece nella cella (cell) sono presenti due metodi setImage e setImageAlpha che settano l’immagine e la trasparenza cosi da aggiornare la cella con l’immagine appena scaricata.