如何使用带有UICollectionView的SDWebImage添加溶解动画

时间:2015-03-20 07:12:11

标签: ios iphone user-interface sdwebimage collectionview

我想使用SDWebImage imageView 添加一些动画。我的 collectionView 委托功能在这里:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{    
    Cell *cell = (Cell *)[cv dequeueReusableCellWithReuseIdentifier:@"identifier" forIndexPath:indexPath];

    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:URL] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {   
        cell.imageView.alpha = 0;
        [UIView animateWithDuration:0.5 animations:^{
            cell.imageView.alpha = 1;
        }];    
    }];
}

SDWebImage 下载图像并设置 imageView 的图像时,可以。 但是当我调用[collection reloadData]方法时,这些 imageViews 会再次消失。

我知道原因,但我没有解决方案。

2 个答案:

答案 0 :(得分:1)

我最近一直在努力解决同样的问题,我想我已经提出了一个易于使用的解决方案。你可以看到它here

基本上它是一个UIImageView类别,只有当它从网上下载或从磁盘缓存中获取时才使用动画设置图像(这需要的时间少得多,但仍然很明显)。如果它来自内存 - 不需要动画。当您重新加载集合视图时,图像显然会缓存在内存中,因此不会使用任何动画。让我知道它是否适合你。

答案 1 :(得分:1)

如果您在加载图片之前正在寻找动画,请尝试以下操作:

cell.imageView.alpha=0;
[UIView animateWithDuration:_duration animations:^{

    cell.imageView.alpha = 1;

}];
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:URL] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {   
}];

如果图像加载需要时间,请使用:

[shopImg sd_setShowActivityIndicatorView:YES];
[shopImg sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];

在调用sd_setImageWithURL以显示活动指示符之前。 在第一次缓存之后,animateWithDuration将像魅力一样工作。

这是一种解决方法,因为NKorotkov说你也可以写一个cateory。

PS。我知道这个问题是2年前提出来的。这个答案适用于SDWebImage中的新手。