Ios UICollectionView在滚动时显示错误的图层

Ios UICollectionView在滚动时显示错误的图层,ios,objective-c,uicollectionview,sdwebimage,Ios,Objective C,Uicollectionview,Sdwebimage,我知道这是一个很常见的问题。我见过很多人在这里问这种类型的问题,但我似乎仍然不能正确回答 我有一个带图片的UICollectionView。我正在从facebook获取图像,所以我使用SDWebImage来加载它们 直到这里一切都正常 用户可以上传他拍摄的照片。因此,在上传过程完成并将图像上传到facebook之前,我希望本地图像显示出来,但带有一个层(不同的alpha、活动等),一旦我收到服务器的通知,facebook的新图像将替换本地图像 我的问题是,在将本地图像添加到带有该层的collec

我知道这是一个很常见的问题。我见过很多人在这里问这种类型的问题,但我似乎仍然不能正确回答

我有一个带图片的UICollectionView。我正在从facebook获取图像,所以我使用SDWebImage来加载它们

直到这里一切都正常

用户可以上传他拍摄的照片。因此,在上传过程完成并将图像上传到facebook之前,我希望本地图像显示出来,但带有一个层(不同的alpha、活动等),一旦我收到服务器的通知,facebook的新图像将替换本地图像

我的问题是,在将本地图像添加到带有该层的collectioView后,更多的单元格显示该层,当我向上滚动时,新图像会发生变化

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

    PictureCell* cell = (PictureCell *)[_collectionView dequeueReusableCellWithReuseIdentifier:[PictureCell reuseIdentifier] forIndexPath:indexPath];

    Picture *picture=(Picture *)[_campaign.pictures objectAtIndex:indexPath.row];


    //If the picture is being uploaded, add the image from the local image property and set the blur layer

    if (!picture.facebookPicture) {
        cell.pictureImageView.image = picture.image;
    [cell TaggleBlur:YES];

    }
    else
    {
        [cell.pictureImageView sd_setImageWithURL: [NSURL URLWithString:picture.facebookPicture.source ]placeholderImage:[UIImage imageNamed:@"actionBar_pico_icon"]  completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
            NSArray *visibleIndexPaths = [_collectionView indexPathsForVisibleItems];
            if (error==nil) {
                if ([visibleIndexPaths containsObject:indexPath]) {

                    cell.pictureImageView.image = image;
                    [cell TaggleBlur:NO];

                }
            }
        }];
    }

    return cell;
}

当imageview添加到单元格内容视图时,将其设置为零。我不知道何时将imageview设置为零。我建议您阅读一下UICollectionView如何重用单元格。当集合视图开始将单元格出列时(collectionView:cellForItemAtItemPath:gets called),并不一定意味着您的单元格是可见的。如果不是,will将不会在cell.pictureImageView.image中设置图像。如果发生这种情况,上次使用单元格时显示的图像就是将显示的图像。最后,您应该覆盖PictureCell中的prepareForReuse,将映像设置为nil,并取消任何正在进行的映像下载。我建议将sd_setImageWithURL移到单元格中。好的,我会试试。谢谢基本上你在PictureCell中还有两种方法。1.setPicture,这将是您试图设置的facebook源。在那里,您可以调用sd_setImageWithURL:completed:。另一个是prepareforeuse,它将把pictureImageView.image设置为nil,并且(重要的)取消该imageView的下载。这应该能解决你的问题。