Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在UICollectionview中显示前9幅图像?_Ios_Objective C_Asynchronous_Uiimageview_Uicollectionview - Fatal编程技术网

Ios 如何在UICollectionview中显示前9幅图像?

Ios 如何在UICollectionview中显示前9幅图像?,ios,objective-c,asynchronous,uiimageview,uicollectionview,Ios,Objective C,Asynchronous,Uiimageview,Uicollectionview,我有一个包含50个图像url的图像url列表。我试图在UICollectionview中显示它,但速度太慢。我一次显示9个单元格(图像),如3x3(3行3列)。如何在加载时显示前9个图像,在下次滚动时显示下9个图像?这可能吗?我尝试了SDWebImages来加载图像,它对我不起作用。请帮助我 集合视图单元格中的代码ForItemAtIndexPath:() 注释中的代码用于加载图像需要花费大量时间,该代码用于从文档目录加载图像如果图像不存在,则我将显示在一个占位符图像中 cell = n

我有一个包含50个图像url的图像url列表。我试图在UICollectionview中显示它,但速度太慢。我一次显示9个单元格(图像),如3x3(3行3列)。如何在加载时显示前9个图像,在下次滚动时显示下9个图像?这可能吗?我尝试了SDWebImages来加载图像,它对我不起作用。请帮助我

集合视图单元格中的代码ForItemAtIndexPath:() 注释中的代码用于加载图像需要花费大量时间,该代码用于从文档目录加载图像如果图像不存在,则我将显示在一个占位符图像中

    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;
/////////////////////问题代码:加载图像花费太多时间//////////////////////

  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个图像,其余部分仍然为空)

长滚动后的应用程序屏幕(第三个图像:最后一列有一些图像,其余列仍然为空)

应用程序屏幕再次滚动至顶部,因此第一个图像已更改
您可以尝试以下代码

[[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"]];
        }
    });

});

希望它能为您工作。

SDWebImage不适合您的具体原因是什么?显示您的代码。您是自己下载这些图像吗?是的,请检查我更新的下载图像问题为什么使用“等待5秒”?下载部分正在工作fyn..但加载部分花费了太多时间工作正常,但是在几个地方加载相同的图像为什么?@Navi我已经修改了我的答案,现在检查一下。第一个用于创建队列,第二个用于向创建的队列添加操作,第三个用于更新UI,因为UI必须从主线程更新。因此,对于第三个,我们将返回到主线程以更新UI。好的,谢谢您的回答,但这里只有我的第三列图像随机出现,每次滚动图像都会被重写,因此我可以看到一个图像更改为多个图像。我需要3 x 3网格视图。这里只剩下最后一列了。