在UICollectionView中的didSelectItemAtIndexPath之前调用哪个方法..?

时间:2016-02-11 09:21:41

标签: ios objective-c

我使用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方法,它就可以正常工作。

2 个答案:

答案 0 :(得分:2)

首先 - 您正在使用同步方法来加载imeges。这真的很糟糕。请尝试使用SDWebImageCache下载程序。 据我了解你的问题,你需要添加一些加载图像的标记。只要SDWebImageCache库加载图像,它就会将其放入缓存中。加载图像后,重新加载集合视图单元格并在配置部分(无论何时在CellForRow或WillDisplay方法中)检查缓存。如果图像在那里 - 设置单元格的属性,负责此“标记”显示或隐藏状态

答案 1 :(得分:1)

使用collectionView:didSelectItemAtIndexPath:很好,您只需要异步处理,因为当前使用dataWithContentsOfURL:的方法是同步请求并阻塞主线程直到下载完成。

考虑使用SDWebImage和它添加的UIImageView扩展来管理图像下载和显示。它还支持占位符图像,您可以提供该图像以指示下载正在进行中。