我正在将一些图像从解析下载到UICollectionView
。问题是在下载图像之前重复使用单元格。如何取消请求并避免在不同的单元格上重复相同的图像?
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
WallImage *wallImageFromUser = [DataStore instance].wallImagesFromUser[indexPath.row];
static NSString *identifier = @"Cell";
UserPhotoCollectionViewCell *cell = (UserPhotoCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
if ([[DataStore instance].wallImagesFromUser count] > 0) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(void){
UIImage *postedImage = [UIImage imageWithData:[wallImageFromUser.imageFile getData]];
dispatch_async(dispatch_get_main_queue(), ^(void){
[cell.userPhotoButton setImage:postedImage forState:UIControlStateNormal];
});
});
}
return cell;
}
我尝试使用[wallImagesFromUser.imageFile cancel]
,但没有成功。
有什么建议吗?
答案 0 :(得分:-1)
根据我的说法,您应该创建您的单元格标识符名称作为您的自定义单元格名称。这是避免重复应用程序中的单元格的更好方法。并尝试这个
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"UserPhotoCollectionViewCell";
UserPhotoCollectionViewCell *cell = (UserPhotoCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(void){
WallImage *wallImageFromUser = [DataStore instance].wallImagesFromUser[indexPath.row];
UIImage *postedImage = [UIImage imageWithData:[wallImageFromUser.imageFile getData]];
dispatch_async(dispatch_get_main_queue(), ^(void){
[cell.userPhotoButton setImage:postedImage forState:UIControlStateNormal];
});
});
return cell;
}
但我更喜欢SDWebImage在collectionview / tableview的单元格中下载图像 您可以使用SDWebImage第三方在您的collectionview单元格图像中下载图像。它下载图像一次,并将图像设置为该特定单元格。它减少了在集合视图单元格中重复图像的问题。它还可以提高您的应用性能。你可以在这里下载