博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS网络图片尺寸适配
阅读量:6036 次
发布时间:2019-06-20

本文共 3259 字,大约阅读时间需要 10 分钟。

一.前言:

  • 1.iOS开发中,常碰到网络图片需要做尺寸适配(使显示出来的图片不变形)
  • 2.最好的解决方案是:后台把图片的分辨率拼接在图片的URL地址中,我们截取获得分辨率,从而根据宽高比,来适配imageView尺寸.
  • 3.但往往有些时候由于各种原因,图片分辨率后台那边加不上去,没办法只好我们自己来解决了.
  • 4.正好前段时间有这个需求,故特意写了一个工具XHWebImageAutoSize,来处理这个问题.
  • 5.项目/代码地址:见篇末

二.效果:

三.XHWebImageAutoSize特性:

  • 1.异步缓存网络图片尺寸,优先从缓存中获取图片尺寸.
  • 2.UITableView,UICollectionView动态刷新UI.

四.工作原理:

  • 1.XHWebImageAutoSize的工作原理很简单,就是在首次加载网络图片后,缓存该图片的尺寸,动态刷新UI,下次直接调用缓存的尺寸.

五.API:

/** *   Get image height * *  @param url            imageURL *  @param layoutWidth    layoutWidth *  @param estimateHeight estimateHeight(default 100) * *  @return imageHeight */+(CGFloat)imageHeightForURL:(NSURL *)url layoutWidth:(CGFloat)layoutWidth estimateHeight:(CGFloat )estimateHeight;/** *  Get image size from cache,query the disk cache synchronously after checking the memory cache * *  @param url imageURL * *  @return imageSize */+(CGSize )imageSizeFromCacheForURL:(NSURL *)url;/** *  Store an imageSize into memory and disk cache * *  @param image          image *  @param url            imageURL *  @param completedBlock An block that should be executed after the imageSize has been saved (optional) */+(void)storeImageSize:(UIImage *)image forURL:(NSURL *)url completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock;/** *  Get reload state from cache,query the disk cache synchronously after checking the memory cache * *  @param url imageURL * *  @return reloadState */+(BOOL)reloadStateFromCacheForURL:(NSURL *)url;/** *  Store an reloadState into memory and disk cache * *  @param state          reloadState *  @param url            imageURL *  @param completedBlock An block that should be executed after the reloadState has been saved (optional) */+(void)storeReloadState:(BOOL)state forURL:(NSURL *)url completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock;复制代码
  • 2.tableView reload相关
/** Reload tableView @param url imageURL */-(void)xh_reloadDataForURL:(NSURL *)url;复制代码
  • 3.collectionView reload相关
/** Reload collectionView  @param url imageURL */-(void)xh_reloadDataForURL:(NSURL *)url;复制代码

六.使用方法:

  • 此处以在UITableView中使用,UITableViewCell上仅有一个UIImageView为例,其他示例详见
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    NSString *url = self.dataArray[indexPath.row];    /**     *  参数1:图片URL     *  参数2:imageView 宽度     *  参数3:预估高度(此高度仅在图片尚未加载出来前起作用,不影响真实高度)     */   return [XHWebImageAutoSize imageHeightForURL:[NSURL URLWithString:url] layoutWidth:[UIScreen mainScreen].bounds.size.width-16 estimateHeight:200];}   -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    DemoVC1Cell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];    if(!cell){        cell = [[DemoVC1Cell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];    }    NSString *url = self.dataArray[indexPath.row];    [cell.imgView sd_setImageWithURL:[NSURL URLWithString:url] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {        /** 缓存image size */        [XHWebImageAutoSize storeImageSize:image forURL:imageURL completed:^(BOOL result) {            /** reload  */            if(result)  [tableView  xh_reloadDataForURL:imageURL];        }];    }];    return cell;}复制代码

七.小结:

  • 代码地址:

转载地址:http://unlhx.baihongyu.com/

你可能感兴趣的文章
Go语言标准库之JSON编解码
查看>>
linux上架设l2tp+ipsec ***服务器
查看>>
curl指令的使用
查看>>
LNAMP第二版(nginx 1.2.0+apache 2.4.2+php 5.4)
查看>>
css3中变形与动画(一)
查看>>
[实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表
查看>>
[译] ES2018(ES9)的新特性
查看>>
正则与sed,grep,awk三剑客
查看>>
诊断一句SQL不走索引的原因
查看>>
Linux pipe函数
查看>>
(原創) 如何設計一個數位相框? (SOC) (Quartus II) (SOPC Builder) (Nios II) (TRDB-LTM) (DE2-70)...
查看>>
/etc/profile文件内容
查看>>
一页纸IT项目管理:大道至简的实用管理沟通工具
查看>>
汽车知识:车内异味的清除方法
查看>>
IE6 7下绝对定位引发浮动元素神秘消失
查看>>
浏览器的回流和重绘及其优化方式
查看>>
2.4 salt grains与pillar jinja的模板
查看>>
VDI序曲二十 桌面虚拟化和RemoteApp集成到SharePoint 2010里
查看>>
移动互联网,入口生死战
查看>>
JAVA多线程深度解析
查看>>