我有一个带有50个图像网址的图片网址。我试图在UICollectionview中显示它,但它变得太慢。我一次显示9个单元格(图像),如3x3(3行3列) 。如何在加载时显示前9个图像,在下次滚动时显示下9个图像。?这可能吗?我尝试使用SDWebImages来加载图像,它不适用于我。请帮助我。
CODE INSIDE 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;
/////////////////////问题代码:需要花费很多时间才能加载图片//////////////// //////
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;
这就是我所期待的
但我是这样的, App加载时间没有任何滚动(第一张图片:3列为空)
首次滚动后的应用程序屏幕(第二张图像:最后一列显示2张图像,其余部分仍为空)
长卷轴后的应用程序屏幕(第三张图片:最后一列有些图像在那里,其余列仍然是空的)
应用程序屏幕再次滚动到顶部,因此第一张图像发生了变化
答案 0 :(得分: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"]];
}
});
});
希望它对你有用。