您的位置:首页 > 理论基础 > 计算机网络

【iOS开发-从网络上获取图片尺寸】

2016-03-18 23:51 357 查看
实际开发过程中,容易碰到从网络上获取图片尺寸的场景,比如一个UIImageView要装载从网络上获取的图片,但要先设置其frame,此时又不知道图片尺寸,就要从网络上获取尺寸了。为了最好的用户体验,一般最好由服务器返回图片尺寸参数。

但因特殊原因,服务器无法提供的,就需要自己先将图片下载到本地,再从本地获取图片尺寸了。但问题在于,图片下载是是耗时操作,等图片下载完成后,在拿到图片的尺寸设置控件的frame,这样会让界面看起来非常卡。为了解决这个问题,我们可以开启子线程,异步获取图片。(主线程继续加载UI控件,子线程下载图片),等子线程下载完毕后,再回到主线程中刷新UI。

// 创建串行队列(因为在子线程中,要将每个图片的尺寸按顺序加到模型数组中,故使用串行队列)
dispatch_queue_t queue = dispatch_queue_create("cn.xxx.queue", DISPATCH_QUEUE_SERIAL);
        
[prodetailUrl enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

// 开启异步函数,获取下载图片,获取尺寸
dispatch_async(queue, ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:obj]];
UIImage *image = [UIImage imageWithData:data];
CGSize imgSize = [image getSize];
[weakSelf.DetialImgHeigths addObject:@(imgSize.height)];
[weakSelf.DetialImgWides addObject:@(imgSize.width)];

// 回到主线程执行
dispatch_sync(dispatch_get_main_queue(), ^(){

[weakSelf.tb  reloadData];
[weakSelf.detailtb reloadData];
});
});                 }];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: