2010-11-22 13 views
0

Tous les exemples disponibles qui mettent à jour dynamiquement les images UIImageView à un débit élevé? Ces images sont reçues sur une connexion IP dans un NSThread. Mais ils ne se mettent pas à jour quand je fais imageView.image = newImageRecd;Mise à jour dynamique des uiimages

EDIT: Toutes les données sont recd sur thread principal

reconnaissant de toute aide/pointeurs.

Répondre

0

Les mises à jour de l'interface utilisateur doivent être effectuées sur le thread principal. Si vous utilisez la connexion sur un thread différent, utilisez:

[self performSelectorOnMainThread:@selector(updateImageView:) withObject:newImageRecd waitUntilDone:FALSE]; 

updateImageView: est la méthode utilisée pour définir la propriété d'image de vue de l'image:

-(void)updateImageView:(UIImage *)image 
{ 
    [self.imageView setImage:image]; 
} 
+0

Non, cela ne fonctionne pas. Toutes les données sont recd sur le thread principal. –

+0

Votre question indique "reçu sur une connexion IP dans un NSThread". Alors, que voulez-vous dire par là? –

+0

La connexion est établie dans un IBAction et un sélecteur est appelé pour recevoir des données sur le thread principal. –

1

Pour iOS 4 et versions ultérieures, vous pouvez utiliser Grand Central Dispatch (GCD) pour charger des images sur un fil d'arrière-plan. Voici un lien qui explique ce processus entièrement:

http://blog.slaunchaman.com/2011/02/28/cocoa-touch-tutorial-using-grand-central-dispatch-for-asynchronous-table-view-cells/

Le tutoriel ci-dessus fournit ce code:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 

dispatch_async(queue, ^{ 
    UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; 

    dispatch_sync(dispatch_get_main_queue(), ^{ 
     [[cell imageView] setImage:image]; 
     [cell setNeedsLayout]; 
    }); 
}); 

Je me sers moi-même pour charger des images à partir d'un serveur distant, et il travaille génial.