我使用UICollectionView
来显示图像的缩略图。
我想添加一张图片,表示图片是从网上下载的。我正在添加图像作为添加了集合视图的视图的子视图。
我遇到问题,因为只有在执行了 didselectItemAtIndexPath 中的整个操作后才会将图像添加到视图中。
但是我想在用户选择任何单元格后立即添加图像。
我尝试在 shouldSelectItemAtIndexPath 中添加图片,但它没有任何帮助。请帮我。我绊了一下提前致谢。
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSArray *collectionViewArray = downloadedBodyImages[[(DownloadIndexedCollectionView *)collectionView indexPath].section];
NSString *str = [collectionViewArray objectAtIndex:indexPath.item];
NSArray *collectionViewArray2 = downloadedDressesImages[[(DownloadIndexedCollectionView *)collectionView indexPath].section];
NSString *str2 = [collectionViewArray2 objectAtIndex:indexPath.item];
NSURL *url1 = [NSURL URLWithString:str];
NSURL *url2 = [NSURL URLWithString:str2 ];
selectedBodyImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:url1]];
selectedDressImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:url2]];
[self drawRect:crop_rect :selectedBodyImage :selectedDressImage];
[self getCordinatesOfImage:selectedBodyImage withCordinates:[downloadedImagesCoordinates[indexPath.section] objectAtIndex:indexPath.row] inFrame:crop_rect];
}
shouldSelectItemAtIndexPath
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
[self addHud];
return YES;
}
addHud方法为
- (void)addHud
{
_hud = [[ProgressHud alloc]init];
[_hud addHudToView:_downloadView animated:YES ];
//hud.layer.masksToBounds = NO;
[_downloadView addSubview:_hud];
[_downloadView setNeedsDisplay];
}
如果我在Button动作中调用addHud方法,它就可以正常工作。
答案 0 :(得分:2)
首先 - 您正在使用同步方法来加载imeges。这真的很糟糕。请尝试使用SDWebImageCache下载程序。 据我了解你的问题,你需要添加一些加载图像的标记。只要SDWebImageCache库加载图像,它就会将其放入缓存中。加载图像后,重新加载集合视图单元格并在配置部分(无论何时在CellForRow或WillDisplay方法中)检查缓存。如果图像在那里 - 设置单元格的属性,负责此“标记”显示或隐藏状态
答案 1 :(得分:1)
使用collectionView:didSelectItemAtIndexPath:
很好,您只需要异步处理,因为当前使用dataWithContentsOfURL:
的方法是同步请求并阻塞主线程直到下载完成。
考虑使用SDWebImage和它添加的UIImageView
扩展来管理图像下载和显示。它还支持占位符图像,您可以提供该图像以指示下载正在进行中。