UICollectionCellView - 带来重复的图像

时间:2014-05-20 11:56:36

标签: ios uibutton uicollectionview parse-platform

我正在将一些图像从解析下载到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],但没有成功。

有什么建议吗?

1 个答案:

答案 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单元格图像中下载图像。它下载图像一次,并将图像设置为该特定单元格。它减少了在集合视图单元格中重复图像的问题。它还可以提高您的应用性能。你可以在这里下载

https://github.com/rs/SDWebImage