美文网首页
iOS异步请求下载图片

iOS异步请求下载图片

作者: 木马不在转 | 来源:发表于2016-07-08 15:12 被阅读1359次

在iOS中可以这样获取一张网络图片

NSURL *url = [NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/w%3D2048/sign=91c1063e1f950a7b753549c43ee963d9/f31fbe096b63f624b6a9640b8544ebf81b4ca3c6.jpg"];

NSData *data = [[NSData alloc] initWithContentsOfURL:url];

UIImage *img = [UIImage imageWithData:data];

但是图片比较大的时候程序会卡在这里,所以我们要用异步请求来下载图片

1.新建一个single view工程

2.ViewController.h文件:

@interface ViewController : UIViewController {

NSMutableData* _imageData;//如果图片比较大的话,response会分几次返回相应数据,所以需要用NSMutableData来接受数据

float _length;

}

@end

3.ViewController.m文件:

- (void)viewDidLoad

{

[super viewDidLoad];

//初始化图片数据

_imageData = [[NSMutableData alloc] init];

//请求

NSURL *url = [NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/w%3D2048/sign=91c1063e1f950a7b753549c43ee963d9/f31fbe096b63f624b6a9640b8544ebf81b4ca3c6.jpg"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

//连接

[NSURLConnection connectionWithRequest:request delegate:self];

}

4.接受响应头和响应体

//响应头

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

//清空图片数据

[_imageData setLength:0];

//强制转换

NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response;

_length = [[resp.allHeaderFields objectForKey:@"Content-Length"] floatValue];

//设置状态栏接收数据状态

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

}

//响应体

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

[_imageData appendData:data];//拼接响应数据

}

5.请求完成之后将图片显示出来,并且设置状态栏

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

UIImage* image = [UIImage imageWithData:_imageData];

self.view.backgroundColor = [UIColor colorWithPatternImage:image];

//设置状态栏

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}

相关文章

  • iOS异步请求下载图片

    在iOS中可以这样获取一张网络图片 NSURL *url = [NSURL URLWithString:@"htt...

  • 在异步线程中下载很多图片,如果失败了,该如何处理?请结合RunL

    (提示:在异步线程中启动一个RunLoop重新发送网络请求,下载图片) 1>重新下载图片 2>下载完毕,利用Run...

  • iOS 异步线程下载图片

    项目中有一处使用了第三方的图片服务器,当加载列表时,加载图片略缩图,点击略缩图后查看原图, 需求比较简单,就不使用...

  • iOS开发中常用的三方框架

    Objective-C AFNetworking :常用的网络请求框架 SDWebImage :一个异步图片下载缓...

  • Swift开发-Kingfisher框架

    IOS开发-使用Kingfisher加载图片 Kingfisher (中文名:翠鸟) 是一个异步下载和缓存图片的库...

  • 5.SdWebImage原理

    iOS开发中SdWebImage可以说是作为图片下载的利器,下面就大概说一下它的原理。 1.我们在调用图片异步下载...

  • ios开发

    允许ios访问网络内容 发送异步请求网页内容显示在webview中 异步请求json,并且转成字典

  • 处理网路请求2-异步POST请求和同步请求

    本文目录一、异步POST请求二、NSURLConnection的其他请求方法 上一讲介绍了iOS中的异步GET请求...

  • 异步下载图片

    我的需求是当前页面异步下载图片,存在数组里,传给下一级页面展示。保证下级页面打开的时候就可以展示出来。 dispa...

  • 异步下载图片

    一. 加载图片常见问题 1.同步加载图片 存在问题:通过模拟延时发现,如果网速慢,会非常卡,影响用户体验滚动表格,...

网友评论

      本文标题:iOS异步请求下载图片

      本文链接:https://www.haomeiwen.com/subject/ywcrjttx.html