首次加载图片时(通过网址),图片加载应该是动画的。之后,滚动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];
}
答案 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:
实际设置图像。我不确定你是否需要在动画块中再次这样做。