我想使用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 会再次消失。
我知道原因,但我没有解决方案。
答案 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中的新手。