UITableViewCell AFNetworking 仅加载一次带有动画的图像
Posted
技术标签:
【中文标题】UITableViewCell AFNetworking 仅加载一次带有动画的图像【英文标题】:UITableViewCell AFNetworking load image with animation only once 【发布时间】:2014-10-06 12:46:52 【问题描述】:当第一次加载图片(通过 URL)时,图片加载应该是动画的。之后,滚动 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];
【问题讨论】:
【参考方案1】:我认为您应该将图像存储为数据源的属性,或者您应该将图像存储在磁盘上。
您必须在完成请求后将图像存储为属性。
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】:问题是您永远不会检查该特定行的图像是否已经下载。
无论何时下载图像,都需要将它们保存在success
块中的某个位置(例如NSMutableArray
)。在调用setImageWithURLRequest
之前,请检查您的数组以查看该行是否已存在图像。如果是这样,请在本地加载它。如果没有,只有然后调用setImageWithURLRequest
。
【讨论】:
【参考方案3】:如果您查看UIImageView+AFNetworking.h,它会在-setImageWithURLRequest:placeholderImage:success:failure:
调用的成功块中明确指出:
如果图像是从缓存中返回的,请求和响应 参数将是
nil
。
只有在请求和响应参数不为 nil 时,您才能使用这个事实来运行动画。
顺便说一句,-setImageWithURLRequest:placeholderImage:success:failure:
实际上设置图像。我不确定您是否需要在动画块中再次执行此操作。
【讨论】:
谢谢。描述还说:如果指定了成功块,则该块负责在返回之前设置图像视图的图像。如果未指定成功块,则应用使用self.image = image
设置图像的默认行为。以上是关于UITableViewCell AFNetworking 仅加载一次带有动画的图像的主要内容,如果未能解决你的问题,请参考以下文章