当前位置: 首页 > news >正文

iOS根据网络图片的size大小设置UIImageView的大小

有时候在设置UIImageView的大小时候需要根据UIimage的长宽比来自动设置,不让图片原比例失真。

如果是从本地获取到的图片,[UIImage imageNamed:@""];

这样就可以拿到image了,从而获取到image的size。但大多数时候我们都是网络请求拿到的图片,

我们需要

NSData *data = [NSData dataWithContentsOfURL:url];

image = [UIImage imageWithData:data];

这样来得到image,但是在网络慢的情况下,这种同步的请求可能会让线程卡住。

一般情况下我们都是使用SDWebImage这个第三方来加载图片的。但都是用UIimageView来调Sd_webImage 这样的方法直接设置,而不是拿到image后再去设置UIimageView的image,这样我们就没办法先得到size设置好UIimageView的大小再去设置image。

 

在网上找到一个方法解决了这个问题,就是在SDWebImage 中有一个获取缓存的方法,先判断SDWebImage有没有缓存这个图片,有的话就获取,没有再使用

NSData *data = [NSData dataWithContentsOfURL:url];

image = [UIImage imageWithData:data];

来获取

 

代码如下,

//显示单张图片时,固定宽度。

 

    __block CGFloat itemW = 200;

    __block CGFloat itemH = 0;

    if (_photoDataArray.count == 1) {

    

        UIImageView * imageView = [[UIImageView alloc] init];

        NSURL * url = [NSURL URLWithString:_photoDataArray.firstObject];

        [imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeHolder.jpg"]];

        SDWebImageManager *manager = [SDWebImageManager sharedManager];

        BOOL existBool = [manager diskImageExistsForURL:url];//判断是否有缓存

        UIImage * image;

        if (existBool) {

            image = [[manager imageCache] imageFromDiskCacheForKey:url.absoluteString];

        }else{

            NSData *data = [NSData dataWithContentsOfURL:url];

            image = [UIImage imageWithData:data];

        }

        

        //根据image的比例来设置高度

        if (image.size.width) {

            itemH = image.size.height / image.size.width * itemW;

            

            if (itemH >= itemW) {

                itemW = 120;

                itemH = image.size.height / image.size.width * itemW;

            }

        }

相关文章:

  • sqlmap 本地安装
  • Ubuntu server 14.04升级16.04
  • 提取CString中的汉字及个数
  • connect-flash 用法详解
  • JavaScript的arguements
  • Perceptual Losses for Real-Time Style Transfer and Super-Resolution and Super-Resolution 论文笔记...
  • 微服务学习笔记二:Eureka服务注册发现
  • php知识总结(二)
  • Java]Socket和ServerSocket服务器端接受数据
  • Cmakelists.txt中间部分模板
  • Native 性能稳定性极致优化
  • OpenGL中的二维编程——从简单的矩形开始
  • Laravel 建站随笔
  • PHP面向对象深入研究之【命名空间】与【自动加载类】
  • Lucene的各中文分词比较
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • JavaScript创建对象的四种方式
  • js面向对象
  • React 快速上手 - 07 前端路由 react-router
  • Spring Cloud中负载均衡器概览
  • tab.js分享及浏览器兼容性问题汇总
  • 诡异!React stopPropagation失灵
  • 机器学习学习笔记一
  • 老板让我十分钟上手nx-admin
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端攻城师
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 人脸识别最新开发经验demo
  • 深度解析利用ES6进行Promise封装总结
  • 新版博客前端前瞻
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 自定义函数
  • MPAndroidChart 教程:Y轴 YAxis
  • 阿里云移动端播放器高级功能介绍
  • ​你们这样子,耽误我的工作进度怎么办?
  • #stm32整理(一)flash读写
  • (C语言)fgets与fputs函数详解
  • (solr系列:一)使用tomcat部署solr服务
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (简单) HDU 2612 Find a way,BFS。
  • (三)docker:Dockerfile构建容器运行jar包
  • (学习日记)2024.01.09
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .FileZilla的使用和主动模式被动模式介绍
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • @Autowired多个相同类型bean装配问题
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [C++]C++基础知识概述