Ios 如何在UICollectionview中显示前9幅图像?
我有一个包含50个图像url的图像url列表。我试图在UICollectionview中显示它,但速度太慢。我一次显示9个单元格(图像),如3x3(3行3列)。如何在加载时显示前9个图像,在下次滚动时显示下9个图像?这可能吗?我尝试了SDWebImages来加载图像,它对我不起作用。请帮助我 集合视图单元格中的代码ForItemAtIndexPath:() 注释中的代码用于加载图像需要花费大量时间,该代码用于从文档目录加载图像如果图像不存在,则我将显示在一个占位符图像中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
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网格视图。这里只剩下最后一列了。