2010-07-21 6 views
1

J'écris un lecteur pour iPad qui affiche des images (1024x1322 max) dans un UIScrollViewUIScrollView animation laggy

chaque image est chargée dans un thread d'arrière-plan quand il est nécessaire (au cours de défilement) (il y a toujours 3 images chargées au maximum).

Mon problème est le suivant: lorsque les données sont chargées, je suis mise à jour du UIImageView, dans mon fil fond comme ça:

image= [[UIImage alloc] initWithContentsOfFile: file]; 
[content setImage:image] 

Il semble « bloquer » le fil conducteur et faire l'animation UIScrollView pas lisse du tout.

Merci d'avance pour toute idée

+0

L'avez-vous résolu? J'ai rencontré un problème similaire lors de la mise en cache d'images sur le disque dans une application intensive en images. Je ne sais toujours pas d'une bonne solution. http://stackoverflow.com/questions/3756863/scroll-view-and-table-view-performance-when-loading-images-from-disk – pmc255

+0

Et vous ne devriez pas accéder à UIKit à l'intérieur d'un thread autre que le thread principal - http : //developer.apple.com/library/ios/#documentation/uikit/reference/UIKit_Framework/Introduction/Introduction.html - "Les classes UIKit ne doivent être utilisées qu'à partir du fil principal d'une application" –

Répondre

0

faire quelque chose comme ça dans votre fil d'arrière-plan, au lieu d'utiliser passe UIImage

CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename("file.png"); 
CGImageRef image = CGImageCreateWithPNGDataProvider(dataProvider, NULL, NO, kCGRenderingIntentDefault); 

retour ref image à votre thread principal puis créez le UIImage avec [ UIImage imageWithCGImage: image]

Hope this helps

2

Vous devriez ne se t l'image d'une vue d'image (ou toute autre propriété d'un composant d'interface utilisateur) d'un thread d'arrière-plan. UIKit est pas thread-safe. Vous devez passer l'image au thread principal, en utilisant GCD ou performSelectorOnMainThread:withObject:waitUntilDone:.