2010-05-03 6 views
0

J'ai une application qui nécessite le défilement de nombreuses images.images de chargement paresseux dans UIScrollView

parce que je ne peux pas charger toutes les images, et l'enregistrer dans la mémoire, je suis paresseux les charger. Le problème est que si je défile trop rapidement, il y a des "images noires" qui apparaissent (images qui n'ont pas réussi à charger).

c'est le code de chargement paresseux: int currentImageToLoad = [self calculateWhichImageShowing] + imageBufferZone; [(UIView*)[[theScrollView subviews] objectAtIndex:0]removeFromSuperview]; PictureObject *pic = (PictureObject *)[imageList objectAtIndex:currentImageToLoad];

MyImageView *iv = [[MyImageView alloc] initWithFrame:CGRectMake(currentImageToLoad * 320.0f, 20.0f, 320.0f, 460)]; 
    NSData *imageData = [NSData dataWithContentsOfFile:[pic imageName]]; 
    [iv setupView:[UIImage imageWithData: imageData] :[pic imageDescription]]; 
    [theScrollView insertSubview:iv atIndex:5]; 
    [iv release]; 

c'est le code à l'intérieur scrollViewWillBeginDecelerating:

[NSThread detachNewThreadSelector:@selector(lazyLoadImages) toTarget:self withObject:nil]; 

Répondre

2
  1. Pourquoi le code dans la méthode willbegindecelerating? Il serait préférable de l'avoir dans la méthode scrolviewdidscroll afin que le chargement puisse commencer dès que possible.

  2. Vous ne devez pas modifier les vues à partir d'un thread séparé comme dessin de vue est pas thread-safe

  3. sont les images vraiment stockées sous forme de données dans un fichier ou sont-ils des fichiers d'image? Si vous utilisez des fichiers image, utilisez [UIImage imageNamed:] pour les charger car vous effectuez 2 conversions pour le moment. Si elles sont des données, je vous suggère de créer des UIImages pour la plupart d'entre elles sur un fil séparé lorsque le scollview est affiché pour la première fois, afin qu'elles soient prêtes lorsqu'elles doivent être ajoutées à la scrollview.

Questions connexes