簡體   English   中英

使用GCD從設備加載UICollectionViewCell異步圖像,

[英]UICollectionViewCell asynchronous image loading from device using GCD,

我有一個收集視圖,該視圖需要顯示圖像的集合,這些圖像的文件保存在設備上。 它們都是600x600像素,所以我認為最好在后台線程上異步創建UIImage,然后在主線程上設置UIImageViewimage屬性。 下面是我在(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath方法中執行此操作的位置

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        NSString *imageName = [NSString stringWithFormat:@"wo-%@", template.fileName];

        UIImage *image = [UIImage imageNamed:imageName];
        dispatch_async(dispatch_get_main_queue(), ^{
            if (image == nil)
            {
                self.collectionView.backgroundColor = [UIColor redColor];
                NSLog(@"image named: %@ in nil!", imageName);
            }
            cell.imageView.image = image;
        });
    });

    return cell;

每隔一段時間,其中一個單元的imagenil 它是不可復制的,並且不一定總是相同的單元格/圖像名稱。 我想知道這是否與使用UIImage imageNamed:方法有關,還是我使用GCD的方式不正確? 對此問題的任何想法將不勝感激。

對於異步加載圖像,“ SDWebImage”可能是最佳解決方案。

SDWebImage

只需在cellForItemAtIndexPath中調用以下方法:

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.example.com/path/to/image.jpg"]
         placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

暫無
暫無

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

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