2017-08-28 3 views
3

Ich verwende eine Bibliothek für asynchrone (Hintergrund) Bild laden für UITableviewCell namens SDWebImage. Aber immer noch große Verzögerung beim Scrollen der Tabellenansicht.iOS Tabellenansicht Lags auf Bildlauf beim Laden Bild in Bildansicht

Mache ich etwas falsch?

Loaded Bildgrößen sind recht groß um 1000x1000

-Code, das Bild zu Zelle lädt:

[cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl] 
      placeholderImage:[UIImage imageNamed:@"image.png"]]; 

ich hier alle Infos zu Tableview Zelle Laden:

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
NSString *identifier = @"newsItem"; 
UINib *nib = [UINib nibWithNibName:@"NewsTableViewCell" bundle:nil]; 
[self.tableView registerNib:nib forCellReuseIdentifier:identifier]; 


self.dataSource = [[NewsDataSource alloc] initWithQuery:[self getQuery] 
              populateCell:^UITableViewCell * _Nonnull(UITableView * _Nonnull tableView, 
                        NSIndexPath * _Nonnull indexPath, 
                        FIRDataSnapshot * _Nonnull snap) { 

               NewsItem *newsItem = [[NewsItem alloc] initWithDictionary:snap.value]; 


               NSURL *url = [NSURL URLWithString:newsItem.image]; 

               NSString *imageUrl = url.absoluteString; 
              NSData *data = [NSData dataWithContentsOfURL:url]; 


               NewsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 
              cell.image.layer.masksToBounds = YES; 
               cell.Title.text = newsItem.title; 
               cell.category.text = [newsItem.categories objectAtIndex:0]; 
               cell.subTitle.text = newsItem.subTitle; 

               [cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl] 
                  placeholderImage:[UIImage imageNamed:@"image.png"]];       
               cell.image.contentMode = UIViewContentModeScaleAspectFill; 
               [cell.image setFrame:CGRectMake(0,0,cell.frame.size.width,cell.frame.size.height)]; 

               cell.selectionStyle = UITableViewCellSelectionStyleNone; 

               return cell; 
              }]; 

[self.dataSource bindToView:self.tableView]; 
self.tableView.delegate = self; 
} 
+2

können Sie den gesamten Code für cellforrowatindexpath anzeigen? –

+0

hinzugefügt ganzen Code zum Laden von Informationen in die Zelle – kosas

+1

Entfernen Sie diese Zeile 'NSData * data = [NSData dataWithContentsOfURL: url];' und sehen – Krunal

Antwort

4

Entfernen Sie die folgende Zeile aus Ihrem Quellcode, da die Bilddaten während der Aktivierung (bei jeder erneuten Verwendung Ihrer Zelle) von Ihrer Tabellenansichtszelle heruntergeladen werden. Beachten Sie auch, dass Daten möglicherweise in den Vordergrund geladen werden und dies möglicherweise der Grund für Verzögerungen beim Scrollen von Tabellen ist.

Der folgende Code behandelt die Bilddarstellung (Herunterladen des Bildes im Hintergrund und macht es im Vordergrund sichtbar) für Ihre Tabellenansichtszelle. So über Code ist in Ihrer Zelle nicht erforderlich.

[cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"image.png"]]; 
2

Sie müssen diese Zeile entfernen

NSData *data = [NSData dataWithContentsOfURL:url]; 
Verwandte Themen