IOS UI多线程 NSThread 下载并显示图片到UIImageView
效果图
@property (weak,nonatomic)IBOutletUILabel *downLabelInfo;
@property (weak,nonatomic)IBOutletUIImageView *imageView;
@end
@implementationViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *url =@"http://d.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=6cbcab9dabec8a13141a53e3c135aaec/aa64034f78f0f7369453c3730855b319ebc41316.jpg";
@autoreleasepool {
NSThread *thread = [[NSThreadalloc]initWithTarget:selfselector:@selector(downloadImage:)object:url];
[thread start];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
-(void) downloadImage:(NSString *)url {
// 要把显示的内容放到同步方法前面即可
self->_downLabelInfo.text =@"正在下载图片中...";
// 同步方法 会卡线程直到完成位置
NSData *imageData = [NSDatadataWithContentsOfURL:[NSURLURLWithString:url]];
UIImage *image =[UIImageimageWithData:imageData];
if(image==nil)
{
}
else
{
//self->_downLabelInfo.text = @"正在下载图片中...";所以这条语句写了也没用
[self performSelectorOnMainThread:@selector(updateImageView:)withObject:(image)waitUntilDone:YES];
}
}
-(void) updateImageView:(UIImage *)image
{
self->_imageView.image = image;
self->_imageView.frame=CGRectMake(self.view.frame.size.width/2-100,self.view.frame.size.height/2-100,200, 200);
self->_downLabelInfo.textColor = [UIColorredColor];
self->_downLabelInfo.text =@"图片下载完成";
}
@end
第二种方式使用 NSURLConnection sendSynchronousRequest 同步方式获取图片内容并显示
将downloadImage方法修改如下
-(void) downloadImage:(NSString *)url
{
self->_downLabelInfo.text =@"正在下载图片中...";
NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:url]];
NSError *error;
// 此处将会造成阻塞
NSData *data = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:&error];
if(data ==nil)
{
NSLog(@"nil");
}
else
{
UIImage *image =[UIImageimageWithData:data];
self->_imageView.image = image;
self->_downLabelInfo.textColor = [UIColorredColor];
self->_downLabelInfo.text =@"图片下载完成";
}
}
IOS UI多线程 NSThread 下载并显示图片到UIImageView的更多相关文章
- EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题
在上一篇里,EmguCV(OpenCV)实现高效显示汉字及叠加 实现了视频叠加及显示,但存在问题,就是 Emgu.CV.UI.ImageBox及C# picturebox显示图片时都会出现闪烁,尤其 ...
- IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)
编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...
- Spring MVC 上传、下载、显示图片
目录 1. 准备工作 1.1 数据库表准备 1.2 实体类 User 和 Mapper(DAO) 1.3 pom.xml 依赖包 1.4 SSM 框架的整合配置 2. 控制器 UserControll ...
- [iOS]深入浅出 iOS 之多线程 NSThread
OS 支持多个层次的多线程 编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法. 下面简要说明这三种不同范式: Thread 是这三种范式里面相对轻量级的,但也是使用起 ...
- iOS:多线程NSThread的详细使用
NSThread具体使用:直接继承NSObject NSThread:. 优点:NSThread 是轻量级的,使用简单 缺点:需要自己管理线程的生命周期.线程同步.线程同步对数据的加锁会有一定的系统开 ...
- iOS多线程自定义operation加载图片 不重复下载图片
摘要:1:ios通过抽象类NSOperation封装了gcd,让ios的多线程变得更为简单易用: 2:耗时的操作交给子线程来完成,主线程负责ui的处理,提示用户的体验 2:自定义operati ...
- iOS开发——多线程篇——NSOperation(基于GCD多线程编程),下载图片并合成新图片
一.NSOperation的基本概念1.简介NSOperation的作用配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperatio ...
- 【iOS系列】-多图片多线程异步下载
多图片多线程异步下载 开发中非常常用的就是就是图片下载,我们常用的就是SDWebImage,但是作为开发人员,不仅要能会用,还要知道其原理.本文就会介绍多图下载的实现. 本文中的示例Demno地址,下 ...
- iOS开发——多线程篇——快速生成沙盒目录的路径,多图片下载的原理、SDWebImage框架的简单介绍
一.快速生成沙盒目录的路径 沙盒目录的各个文件夹功能 - Documents - 需要保存由"应用程序本身"产生的文件或者数据,例如:游戏进度.涂鸦软件的绘图 - 目录中的文件会被 ...
随机推荐
- asp.net链接数据库问题,设置收藏本站,设置主页
SQL Server 2008附加数据库失败:无法打开物理文件拒绝访问解决方法 无法打开物理文件 "E:\SQLDATA\EMSXDB.mdf".操作系统错误 5:"5( ...
- easyui datagrid 逻辑分页
function getGroupUsers(groupPath) { $('#tbGroupUsersList').datagrid({ width: 800, height: 100, nowra ...
- UIScrollView内容缩放
•有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理 也就是说,要完成缩放功能的话,只需要将需要缩放的内容添加到UIScr ...
- [深度优先搜索] POJ 3620 Avoid The Lakes
Avoid The Lakes Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8173 Accepted: 4270 D ...
- 20140701立项 移植WatermarkLabelSys
开始移植WatermarkLabelSys,从一个版本中抽离出最原始的内核,不求完善,只求能运行.时间半个月. 顺利的话针对不同的后缀.进程开始添加规则细节,时间1个月. 在顺利的话,兼容性测试,完善 ...
- ASP.NET MVC自定义ActionResult实现文件压缩
有时候需要将单个或多个文件进行压缩打包后在进行下载,这里我自定义了一个ActionResult,方便进行文件下载 using System; using System.Collections; usi ...
- ssh 注解写法
弄了半天 (好久哦) 首先 applicationContext-db.xml <?xml version="1.0" encoding="UTF-8" ...
- 为什么eclipse中代码提示错误,但是项目目录却不提示错误
public class Aasf { public static void main(String[] args) { System.out.println("");aihfsa ...
- tesseract 编译与使用(windows)
tesseract是google的一个开源OCR项目,项目地址已经迁移到github(现在 2016/09),地址 https://github.com/tesseract-ocr/tesseract ...
- Nginx + uwsgi
1. 安装uwsgi依赖yum groupinstall "Development Tools"yum install pythonyum install python-devel ...