iOS开发swift版异步加载网络图片(带缓存和缺省图片)
iOS开发之swift版异步加载网络图片
与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存。
异步加载图片的核心代码如下:
func setZYHWebImage(url:NSString?, defaultImage:NSString?, isCache:Bool){var ZYHImage:UIImage?if url == nil {return}//设置默认图片if defaultImage != nil {self.image=UIImage(named: defaultImage!)}//是否进行缓存处理if isCache {//缓存管理类var data:NSData?=ZYHWebImageChcheCenter.readCacheFromUrl(url!)if data != nil {ZYHImage=UIImage(data: data!)self.image=ZYHImage}else{//获取异步线程var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)dispatch_async(dispath, { () -> Void invar URL:NSURL = NSURL(string: url!)!var data:NSData?=NSData(contentsOfURL: URL)if data != nil {ZYHImage=UIImage(data: data!)//写缓存ZYHWebImageChcheCenter.writeCacheToUrl(url!, data: data!)//主线程中刷新UIdispatch_async(dispatch_get_main_queue(), { () -> Void in//刷新主UIself.image=ZYHImage})}})}}else{var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)dispatch_async(dispath, { () -> Void invar URL:NSURL = NSURL(string: url!)!var data:NSData?=NSData(contentsOfURL: URL)if data != nil {ZYHImage=UIImage(data: data!)//写缓存dispatch_async(dispatch_get_main_queue(), { () -> Void in//刷新主UIself.image=ZYHImage})}})}}}
缓存的处理这里采用的是写文件的方式,通过文件名来对缓存进行管理,这个框架还不完善,后面会加入缓存清除等功能。缓存的核心代码如下:
class func readCacheFromUrl(url:NSString)->NSData?{var data:NSData?var path:NSString=ZYHWebImageChcheCenter.getFullCachePathFromUrl(url)if NSFileManager.defaultManager().fileExistsAtPath(path) {data=NSData.dataWithContentsOfMappedFile(path) as? NSData}return data}class func writeCacheToUrl(url:NSString, data:NSData){var path:NSString=ZYHWebImageChcheCenter.getFullCachePathFromUrl(url)println(data.writeToFile(path, atomically: true))}//设置缓存路径class func getFullCachePathFromUrl(url:NSString)->NSString{var chchePath=NSHomeDirectory().stringByAppendingString("/Library/Caches/MyCache")var fileManager:NSFileManager=NSFileManager.defaultManager()fileManager.fileExistsAtPath(chchePath)if !(fileManager.fileExistsAtPath(chchePath)) {fileManager.createDirectoryAtPath(chchePath, withIntermediateDirectories: true, attributes: nil, error: nil)}//进行字符串处理var newURL:NSStringnewURL=ZYHWebImageChcheCenter.stringToZYHString(url)chchePath=chchePath.stringByAppendingFormat("/%@", newURL)return chchePath}class func stringToZYHString(str:NSString)->NSString{var newStr:NSMutableString=NSMutableString()for var i:NSInteger=0; i < str.length; i++ {var c:unichar=str.characterAtIndex(i)if (c>=48&&c<=57)||(c>=65&&c<=90)||(c>=97&&c<=122){newStr.appendFormat("%c", c)}}return newStr.copy() as NSString}
框架的github地址,欢迎指正与扩展:https://github.com/ZYHshao/swift-ZYHWebImage
因xcode的版本不同,swift语言语法随环境时常会变化,此版本在6.1中可用,更高版本中需要修改少部分即可。
iOS开发swift版异步加载网络图片(带缓存和缺省图片)相关推荐
- ios开发多线程篇--异步加载网络图片GCD
一.异步加载网络图片 1.ATS (1)简介 从iOS9.0开始,如果按照以前的方式写代码,在访问网络的时候 ,会报以下警告信息: App Transport Security has blocked ...
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(一)
2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为博主原创文章,未经博主允许不得转载. [objc] view plaincopy </pre>&l ...
- android 图片加载 软引用_Android 异步加载网络图片并缓存到本地 软引用 学习分享(转)...
迪 王. 于 星期四, 20/02/2014 - 21:36 提交 在android应用开发的时候,加载网络图片是一个非常重要的部分,很多图片不可能放在本地,所以就必须要从服务器或者网络读取图片. 软 ...
- Android之ListView异步加载网络图片(优化缓存机制)
网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制 ...
- Android使用ImageLoader异步加载网络图片(一)读取单张图片
这里我写的是读取单张的图片从网络读取,和listview多张图片的读取首先是单张的读取这篇博客只写了读取单张的读取多张的下一篇写 此例子的代码 已上传资源页 由于昨天时间比较紧所以,这个Demo 的源 ...
- iOS开发UI篇—懒加载
iOS开发UI篇-懒加载 1.懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...
- listview中getview异步加载网络图片
前言:本以为异步加载挺简单,因为网上代码多,但真想要做好,还真不那么简单,从看代码到弄懂再到自己写,实在是有太多的东西需要学了,用了两天的时间,终于弄出来了,因为用到回调函数,所以理解起来可能难度有点 ...
- 自定义扇形进度条、异步加载网络图片、Activity疯狂旋转动画
效果预览: 正文 1.自定义扇形进度条. 思考: (1)如何绘制扇形. (2)重写onDraw(Canvas canvas) 或 draw(Canvas canvas). (3)是否保留背景设置. ( ...
- android异步加载图片并缓存到内存和sd卡上,Android批量图片加载经典系列——采用二级缓存、异步加载网络图片...
http://www.cnblogs.com/jerehedu/p/4560119.html 2015-06-08 09:20 by 杰瑞教育, 232 阅读, 1 评论, 收藏, 编辑一.问题描述 ...
最新文章
- AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie
- 【Flutter】StatelessWidget 组件 ( Container 组件 | BoxDecoration 组件 | Text 组件 | Icon 组件 )
- 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录
- lintcode: 跳跃游戏 II
- 计算机组成原理个人笔记(三)
- python在windows上安装_在Windows上安装Python | 严佳冬
- 【LeetCode】【HOT】104. 二叉树的最大深度(BFS+队列/递归)
- 从RDS中获取binlog
- Linux centos7安装RabbitMQ3.8.9
- 延禧宫有刺客!快把他收了!
- 前端工程化开发之yeoman、bower、grunt
- NNACL2021 放榜啦~
- db2查询字段备注_SQL基础7:SQLSERVER、ORACLE、DB2中SQL语句查询表字段名、注释、字段类型...
- WPF .NET 4.0 OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)) BUG解决
- matlab2014如何获得hostid,hostid.c/获取主机标识
- 山寨版Google识图
- Redis集群cluster:增加删除(伸缩)节点操作步骤
- windows10桌面_Windows桌面美化记(一)这可能是你看过最详细的美化教程
- java mail 回复邮件_JavaMail - 退回邮件( Bounced Messages)
- 加餐0 | 前后端快速入门学习路线
热门文章
- 64位win7安装vs2010出现“组件安装失败...”等问题的解决方法
- Python3中lambda表达式介绍
- OpenCV中OpenCL模块函数
- 上面一个星星下面一个r_中国第一个王朝不是夏朝?山西出土一个破陶壶,上面俩字揭开谜题...
- python创建列向量_关于Numpy中的行向量和列向量详解
- python二分法查找算法_顺序查找算法和折半(二分法)查找算法,C语言查找算法详解...
- python matplotlib画数据分布图_Python数据可视化之matplotlib
- python编程代码示例_python编程线性回归代码示例
- linux查找项目中的问题,教你如何快速定位项目中慢查询[项目管理]
- Java项目:嘟嘟二手书商城系统(java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP)