2017-08-28 66 views
3

我正在使用異步(背景)圖像加載UITableviewCell稱爲SDWebImage圖書館。但滾動tableview時仍然面臨巨大的滯後。iOS的tableview滯後滾動時加載圖像imageview

我做錯了什麼?

加載的圖像尺寸是相當大的周圍1000×1000

代碼,加載圖像的細胞:

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

這裏我加載的所有信息,以實現代碼如下細胞:

-(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

你能顯示cellforrowatindexpath的整個代碼嗎? –

+0

添加整個代碼爲信息加載單元格 – kosas

+1

刪除此行'NSData * data = [NSData dataWithContentsOfURL:url];'並參見 – Krunal

回答

4

從您的源代碼中刪除以下行,因爲它在您的tableview單元的激活期間(每當您的單元格被重用時)下載圖像數據。另外請注意,它可能會加載數據前景,這可能是滾動tableview時滯後的原因。

NSData *data = [NSData dataWithContentsOfURL:url]; 

以下代碼爲您的tableview單元格處理圖像表示(在後臺下載圖像並使其在前景中可見)。所以上面的代碼在你的單元中不需要。

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

你必須刪除這條線

NSData *data = [NSData dataWithContentsOfURL:url];