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


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

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

     1  
     2             // 创建串行队列
     3              dispatch_queue_t queue = dispatch_queue_create("cn.xxx.queue", DISPATCH_QUEUE_SERIAL);
     4         
     5             [prodetailUrl enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
     6                 
     7                 
     8                 // 开启异步函数,获取下载图片,获取尺寸
     9                 dispatch_async(queue, ^{
    10                     NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:obj]];
    11                     UIImage *image = [UIImage imageWithData:data];
    12                     CGSize imgSize = [image getSize];
    13                     [weakSelf.DetialImgHeigths addObject:@(imgSize.height)];
    14                     [weakSelf.DetialImgWides addObject:@(imgSize.width)];
    15                     
    16                     // 回到主线程执行
    17                     dispatch_sync(dispatch_get_main_queue(), ^(){
    18                         
    19                         [weakSelf.tb  reloadData];
    20                         [weakSelf.detailtb reloadData];
    21                     });
    22                 });24                 }];
  • 相关阅读:
    在C#中使用消息队列RabbitMQ
    从url到页面经历了什么
    jsonp跨域远离
    DNS预处理
    一个架构师需要考虑的问题
    angular2和Vue2对比
    图片多的问题
    xinwenti
    xss和csrf
    ajax是什么
  • 原文地址:https://www.cnblogs.com/heyode/p/5294115.html
Copyright © 2020-2023  润新知