UICollectionCellView - 带来重复的图像

Posted

技术标签:

【中文标题】UICollectionCellView - 带来重复的图像【英文标题】:UICollectionCellView - Bringing repeated Images 【发布时间】:2014-05-20 11:56:36 【问题描述】:

我正在将一些图像从 parse 下载到 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】:

根据我的说法,您应该将您的单元格标识符名称创建为您的自定义单元格名称。这是避免在您的应用程序中重复单元格的更好方法。并尝试这样做

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

https://github.com/rs/SDWebImage

【讨论】:

对不起,我认为你弄错了。您必须对单元格使用 dequeReusable 。我正在从 Parse Web 服务器下载图像。 你是对的。我忘记为单元格添加 dequeReusable。谢谢

以上是关于UICollectionCellView - 带来重复的图像的主要内容,如果未能解决你的问题,请参考以下文章

鸿蒙带来的机会

用了钉钉之后给我生活带来的影响

数据共享之共享数据带来的问题

文档监听器带来空指针异常

反射会带来啥风险? (中等信任度)

拓展给企业、个人、团队带来啥好处!