3

我有一个带有 50 个图像 url 的图像 url plist。我试图在 UICollectionview 中显示它,但它变得太慢了。我一次显示 9 个单元格(图像),如 3x3(3 行和 3 列)。我怎样才能先显示加载时有 9 张图片,下一次滚动时有 9 张图片。这可能吗?我尝试使用 SDWebImages 加载图像,它不适合我。请帮助我。

代码在 collectionView cellForItemAtIndexPath: () 注释内的代码需要大量时间来加载图像,如果图像不存在,该代码用于从文档目录加载图像,然后我将显示在一个占位符图像中

    cell = nil;

    cell = (GMMCollectionViewCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"test" forIndexPath:indexPath];

    cell.tag = indexPath.row;
     docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];



    NSString *path;
    BOOL isImageLoaded = YES;

/////////////////////PROBLEM CODE:TAKING TOO MUCH TIME TO LOAD IMAGE /////////////////// ///

  bookImage = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", docPath, [[allbooksImage objectAtIndex:indexPath.row] lastPathComponent]]];

///////////////////////////////////////// ////////////////////////////

    if(bookImage == nil){
        isImageLoaded = NO;
    }
    if(!isImageLoaded){
        [[cell grid_image] setImage:[UIImage imageNamed:@"App-icon-144x144.png"]];
   } else{

       [[cell grid_image] setImage:bookImage];





    }

    sharedManager.bookID=bookId;

return cell;

这就是我所期待的

在此处输入图像描述

但是我是这样的,应用程序加载时间没有任何滚动(第一张图片:3列是空的) 在此处输入图像描述

第一次滚动后的应用屏幕(第二张图片:最后一列显示 2 张图片,其余部分仍为空) 在此处输入图像描述

长时间滚动后的应用程序屏幕(第三张图片:最后一列有一些图片,其余列仍然是空的) 在此处输入图像描述

应用屏幕再次滚动到顶部,所以第一张图片改变了 在此处输入图像描述

4

1 回答 1

1

你可以试试下面的代码

[[cell grid_image] setImage:nil];

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(concurrentQueue, ^{
    bookImage = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", docPath, [[allbooksImage objectAtIndex:indexPath.row] lastPathComponent]]];
    dispatch_async(dispatch_get_main_queue(), ^{
        if (bookImage)
        {
            [[cell grid_image] setImage:bookImage];
        }
        else
        {
            [[cell grid_image] setImage:[UIImage imageNamed:@"App-icon-144x144.png"]];
        }
    });

});

希望它对你有用。

于 2013-08-12T12:56:25.500 回答