UITableViewCell AFNetworking仅使用动画加载图像一次

时间:2014-10-06 12:46:53

标签: ios objective-c iphone uitableview

首次加载图片时(通过网址),图片加载应该是动画的。之后,滚动tableview不应该触发动画。

下面的代码有问题:每当UITableViewCell出列时都会触发动画,导致图像从出列的单元格中消失。如何让动画只被触发一次?

[thumbnail cancelImageRequestOperation];
NSURL* imageUrl = [NSURL URLWithString:imageUrlString];
if (imageUrl) {
    [thumbnail setImageWithURLRequest:[NSURLRequest requestWithURL:imageUrl]
                     placeholderImage:placeholderImage
                              success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
                                      [UIView transitionWithView:thumbnail
                                                        duration:0.5f
                                                         options:UIViewAnimationOptionTransitionCrossDissolve
                                                      animations:^{thumbnail.image = image;}
                                                      completion:nil];

                              }
                              failure:nil];
}

3 个答案:

答案 0 :(得分:0)

问题是您永远不会检查是否已为该特定行下载了图像。

每当您下载图片时,都需要将它们保存在NSMutableArray块中的某个位置(例如success)。在致电setImageWithURLRequest之前,请检查您的阵列以查看该行是否已存在图像。如果是这样,请在本地加载。如果没有,则仅然后调用setImageWithURLRequest

答案 1 :(得分:0)

我认为你应该将图像存储为数据源的属性,或者应该将图像存储在磁盘上。

您必须在完成请求后将图片存储为属性。

if(!obj.image)
NSURL* imageUrl = [NSURL URLWithString:imageUrlString];
if (imageUrl) {
[thumbnail setImageWithURLRequest:[NSURLRequest requestWithURL:imageUrl]
                 placeholderImage:placeholderImage
                          success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
                                  [UIView transitionWithView:thumbnail
                                                    duration:0.5f
                                                       options:UIViewAnimationOptionTransitionCrossDissolve
                                                  animations:^{thumbnail.image = image;}
                                                  completion:{
obj.image = image;
cell.image = obj.image;
}];

                          }
                          failure:nil];
}
}
else
{
    cell.image = obj.image;
}

要保存到磁盘,您必须执行相同的操作,只需要检查磁盘上是否存在该映像,然后从磁盘设置它以便下载。

答案 2 :(得分:0)

如果查看UIImageView+AFNetworking.h,它会在-setImageWithURLRequest:placeholderImage:success:failure:调用的成功块中明确指出:

  

如果图像是从缓存中返回的,则请求和响应   参数将为nil

只有当请求和响应参数为非零时,您才可以使用此事实来运行动画。

另外,-setImageWithURLRequest:placeholderImage:success:failure:实际设置图像。我不确定你是否需要在动画块中再次这样做。