AFNetworking 异步下载 GIF 带占位符
Posted
技术标签:
【中文标题】AFNetworking 异步下载 GIF 带占位符【英文标题】:AFNetworking async download GIF with placeholder 【发布时间】:2013-10-26 16:15:34 【问题描述】:我一直在使用 AFNetworking 与占位符异步下载 UIImage,它适用于 JPEG 和 PNG,但是我使用 library 来处理我的 GIF 图片。当我同步进行时效果很好。但是,我想使用 AFNetworking 异步下载图像,同时在 ImageView 中显示占位符图像。我怎样才能做到这一点?谢谢!
这是我的代码:
- (void) downloadAllImagesForComment
if (_imageLinkList.count > 0)
if (images == nil)
images = [[NSMutableDictionary alloc] init];
for (NSDictionary *URL in _imageLinkList)
if ([images objectForKey:[URL objectForKey:@"link"]] == nil)
/*
* imageType = 0 <= other
* imageType = 1 <= gif
*/
int imageType = 0;
NSURL *url = [NSURL URLWithString:[URL objectForKey:@"link"]];
NSError *error = [[NSError alloc] init];
NSLog(@"Retrieving imageData...");
NSData *imageData = [NSData dataWithContentsOfURL:url options:NSDataReadingMappedIfSafe error:&error];
NSLog(@"Retrived imageData.");
uint8_t c;
[imageData getBytes:&c length:1];
switch (c)
case 0xFF:
NSLog(@"image/jpeg");
imageType = 0;
break;
case 0x89:
NSLog(@"image/png");
imageType = 0;
break;
case 0x47:
NSLog(@"image/gif");
imageType = 1;
break;
case 0x49:
imageType = 0;
break;
case 0x4D:
NSLog(@"image/tiff");
imageType = 0;
break;
UIImageView *temp_imageView;
if (imageType == 1)
// GIF IMAGE SHOULD BE INITIALIZED HERE!!!!!!
// image = [UIImage animatedImageWithAnimatedGIFData:imageData];
else
temp_imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 280, 250)];
[temp_imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"patch_la"]];
[images setValue:temp_imageView forKey:[URL objectForKey:@"link"]];
NSLog(@"Done downloading image: %@", [URL objectForKey:@"link"]);
【问题讨论】:
【参考方案1】:我建议使用SDWebImage library。它内置了异步动画 Gif 支持。
包含库后,就很简单了(只需将 NSURL 指向远程 Gif):
[imageView setImageWithURL:[NSURL] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)];
【讨论】:
以上是关于AFNetworking 异步下载 GIF 带占位符的主要内容,如果未能解决你的问题,请参考以下文章
异步下载后图像调整大小 AFNetworking UiTableView
使用 AFNetworking 异步下载图像后,是不是可以从 UIImageView 获取图像
iOS - 在 AFNetworking 异步图像下载线程完成后重新加载 UITableView