簡體   English   中英

SDWebImage加載問題。

[英]SDWebImage loading issue.!

你好,我正在使用SDWebImage將遠程圖像加載到我的集合視圖中。 第一次像第一次顯示占位符圖像一樣,它的加載效果很好,當檢索圖像后再更改單元格的圖像...但是第二次我加載相同的圖像時,頂部可見行未顯示圖像,但是當我向下滾動到其他圖像時,它們加載正常。 然后我加載到頂部,圖像在那里。

在我的collectionview類中-

- (void)startIconDownload:(TrialImages *)appRecord forIndexPath:(NSIndexPath *)indexPath
{
  TrialPicDownloader *iconDownloader = [_imageDownloadsInProgress objectForKey:indexPath];
  if (iconDownloader == nil)
  {
        iconDownloader = [[TrialPicDownloader alloc] init];
        iconDownloader.productRecord = appRecord;
        [iconDownloader setCompletionHandler:^{
              MyCollectionViewCell *cell = (MyCollectionViewCell *)[self.myCollectionView cellForItemAtIndexPath:indexPath];
              cell.trialImageView.image = appRecord.trialImage;

              [_imageDownloadsInProgress removeObjectForKey:indexPath];

        }];
        [_imageDownloadsInProgress setObject:iconDownloader forKey:indexPath];
        [iconDownloader startDownload];
  }
}

此方法在TrialPicDownloader類中-

- (void)startDownload
{
  [[SDWebImageManager sharedManager] downloadWithURL:
[NSURL URLWithString:self.productRecord.TrialImagesUrl]
                                   options:SDWebImageCacheMemoryOnly
                                   progress:nil
                                   completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {
                 if (image != NULL) {
                                 self.productRecord.trialImage = image;
                                 if (self.completionHandler)
                                    self.completionHandler();
                                      }
                                   }];


}

NeverMind我能夠通過此代碼解決我的問題...

- (void)startIconDownload:(TrialImages *)appRecord forIndexPath:(NSIndexPath *)indexPath
{
  TrialPicDownloader *iconDownloader = [_imageDownloadsInProgress objectForKey:indexPath];
  if (iconDownloader == nil)
  {
        iconDownloader = [[TrialPicDownloader alloc] init];
        iconDownloader.productRecord = appRecord;
        [iconDownloader setCompletionHandler:^{
              dispatch_async(dispatch_get_main_queue(), ^{
                    MyCollectionViewCell *cell = (MyCollectionViewCell *)[self.myCollectionView cellForItemAtIndexPath:indexPath];
                    cell.trialImageView.image = appRecord.trialImage;
                    [UIView animateWithDuration:0.3f animations:^{
                          [self.myCollectionView.collectionViewLayout invalidateLayout];
                    }];
                    [_imageDownloadsInProgress removeObjectForKey:indexPath];
              });
        }];
        [_imageDownloadsInProgress setObject:iconDownloader forKey:indexPath];
        [iconDownloader startDownload];
  }
}

我用dispatch_async處理主隊列上的完成處理程序,現在它的工作很棒..!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM