J'ai quelques grandes images dans un UITableView groupé. Il y a 1 rangée dans chaque section qui contient l'image et il y a un texte d'en-tête et de pied de page associé pour chaque section à propos de l'image. J'ai travaillé dur pour le faire défiler en douceur est iPhone OS 3.x et finalement réussi. Mais ... quand je suis passé à iOS 4, tout a changé. Maintenant, il y a des performances très saccadées chaque fois qu'une nouvelle cellule est chargée. Voici mon code cellForRowAtIndexPath:Performances du défilement Jittery dans UITableView après la mise à niveau d'iOS 4
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellIdentifier";
UIImageView *photo;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
ApplicationDelegate *appDelegate = (ApplicationDelegate *)[[UIApplication sharedApplication] delegate];
NSString *fileName = [NSString stringWithFormat:@"%@",[[appDelegate.sectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"MainTrackImage"]];
UIImage *theImage = [UIImage imageNamed:[[appDelegate.sectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"MainTrackImage"]];
imageHeight = CGImageGetHeight(theImage.CGImage);
imageWidth = CGImageGetWidth(theImage.CGImage);
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
photo = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, (imageHeight*320)/imageWidth)] autorelease];
photo.tag = PHOTO_TAG;
[cell addSubview:photo];
} else {
photo = (UIImageView *) [cell viewWithTag:PHOTO_TAG];
[photo setFrame:CGRectMake(0, 0, 320, (imageHeight*320)/imageWidth)];
}
photo.image = theImage;
return cell;
}
Note: Je l'ai essayé d'utiliser le code suivant à la place de la méthode "imageNamed" sans succès:
UIImage *theImage = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", bundlePath,fileName]];
J'ai même essayé de pré-mise en cache les images mais sans succès. Toute aide serait grandement appréciée.
MISE À JOUR: J'ai essayé d'expérimenter avec l'aide de Grand Central Dispatch pour charger les images en créant une file d'attente d'image et de les charger de manière asynchrone:
dispatch_async(_image_queue, ^{
photoImageView.image = [imageCacheNS objectForKey:imageString];});
Le problème que je reçois est que les images chargent très lentement et lorsque je fais défiler la table, les images précédemment affichées sont affichées pendant quelques secondes jusqu'à ce que la nouvelle image soit chargée.
MISE À JOUR 2: Je n'ai toujours pas été en mesure de faire ce travail. J'étudie maintenant en utilisant la méthode drawRect pour dessiner la cellule. J'espère que cela améliorera les performances de défilement. L'exemple de code exemple # 5 de tableViewSuite d'Apple montre comment faire ceci, mais j'ai du mal à trouver comment le faire fonctionner pour mon projet. Quelqu'un a-t-il déjà utilisé drawRect pour charger des images dans un tableau?
Merci!
Souhaitez-vous élaborer? Je ne suis pas familier avec l'utilisation de blocs ou de libdispatch. Connaissez-vous des exemples où blocks et libdispatch sont utilisés dans UITableViews? Merci! – Jonah
Voir ici: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Blocks/Articles/00_Introduction.html Aussi, si vous êtes un développeur Apple enregistré, vous pouvez télécharger la WWDC 2010 vidéos gratuites. Les blocs et les vidéos Grand Central Dispatch (libdispatch) sont fantastiques. –
Merci pour l'aide. Je regarderai. – Jonah