[置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在《iOS学习笔记46——图片异步加载之SDWebImage》中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔记《IOS学习笔记34—EGOTableViewPullRefresh实现下拉刷新》中介绍的开源项目是同一个作者。和SDWebImage不同,EGOImageLoading是实现了一个自定义的EGOImageView,使用上和UIImageView非常类似,同时也实现了自动缓存和缓存手动清理的功能。SDWebImage是在UIImageView中添加了一个类别,使用起来好像是使用自带的方法一样,而EGOImageView就完全是一个自定义实现的图片加载组件。这是Github的项目地址:https://github.com/enormego/EGOImageLoading
一、配置工程
到Github页面clone下项目后,里面有个Demo工程,可以自行运行下看看,然后将下载包中的EGOImageLoading拖拽到自己的工程中,并选中Copy····拷贝到项目后确定。这时可以Command+B编译一下,如果工程使用了ARC那么会报错,这时选中工程并选择Biuld Pases,为Compile Sources下的EGO开头的文件加上配置-fno-objc-arc(如图)
这时再Command+B就会看到编译通过了,这就说明项目集成成功了!
二、基本使用
使用起来也很简单,我们这个Demo来实现一个自定义Cell的UITableView列表并异步加载每个Cell的图片显示,单击每个Cell进入子页面并显示单独的图片。
首先我们需要实现一个继承UITableViewCell的自定义cell,头文件如下,声明一个EGOImageView用于显示图片,一个UILabel用于显示该图片的URL:
#import <UIKit/UIKit.h>
#import "EGOImageView.h" @interface ImageCell : UITableViewCell
{
@private
EGOImageView *egoImageView;
UILabel *label;
}
//在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中调用为图片组件加载图片显示
-(void)setImageWithURL:(NSString *)imageURL;
@end
在.m文件中我们初始化这两个组件并实现setImageWithURL:方法:
#import "ImageCell.h" @implementation ImageCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
egoImageView = [[EGOImageView alloc] initWithPlaceholderImage:[UIImage imageNamed:@"placeholder.png"]];
egoImageView.frame = CGRectMake(5, 5, 65, 65);
[self.contentView addSubview:egoImageView];
label = [[UILabel alloc] initWithFrame:CGRectMake(78, 20, 220, 30)];
label.textColor = [UIColor blackColor];
[self.contentView addSubview:label];
}
return self;
} -(void)setImageWithURL:(NSString *)imageURL
{
[egoImageView setImageURL:[NSURL URLWithString:imageURL]];
label.text = imageURL;
}
其中EGOImageView初始化方法中的palaceholder是还没加载完或加载失败时显示的占位图。到这里自定义的UITableViewCell就实现完了,接着到UITableViewController中实现页面展示和功能(关键代码):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
ImageCell *cell = (ImageCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[ImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
} //imgURLs为存储图片URL地址的NSArray数组
[cell setImageWithURL:[imgURLs objectAtIndex:indexPath.row]]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell;
}
我们可以看到,调用自定义的ImageCell中的setImageWithURL:方法即完成了对图片的异步加载,是不是很简单,另外,使用EGOCaceh也可以实现对缓存的释放:
//清理缓存
-(void)clearCacheButton
{
[[EGOCache currentCache] clearCache];
[self.tableView reloadData];
}
最后让我们来看看Demo的效果:
需要源码的同学可以到这里下载,里面有完整的实现:下载
加入我们的QQ群或微信公众账号请查看:Ryan's zone公众账号及QQ群
同时欢迎关注我的新浪微博和我交流:@唐韧_Ryan
觉得这篇文章对你有用就顶我一下吧!
[置顶] iOS学习笔记47——图片异步加载之EGOImageLoading的更多相关文章
- Android学习笔记_36_ListView数据异步加载与AsyncTask
一.界面布局文件: 1.加入sdcard写入和网络权限: <!-- 访问internet权限 --> <uses-permission android:name="andr ...
- 图片异步加载之EGOImageLoading
下载地址 http://pan.baidu.com/share/link?shareid=2690186349&uk=923776187 引入目录 简单实用 http://blog.csdn ...
- [置顶] Android图片异步加载之Android-Universal-Image-Loader
将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就 ...
- Flutter学习笔记(19)--加载本地图片
如需转载,请注明出处:Flutter学习笔记(19)--加载本地图片 上一篇博客正好用到了本地的图片,记录一下用法: 首先新建一个文件夹,这个文件夹要跟目录下 然后在pubspec.yaml里面声明出 ...
- Jetpack Compose学习(4)——Image(图片)使用及Coil图片异步加载库使用
原文地址 Jetpack Compose学习(4)--Image(图片)使用及Coil图片异步加载库使用 | Stars-One的杂货小窝 本篇讲解下关于Image的使用及使用Coil开源库异步加载网 ...
- [学习总结]9、Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影. 可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚 ...
- Android ListView 图片异步加载和图片内存缓存
开发Android应用经常需要处理图片的加载问题.因为图片一般都是存放在服务器端,需要联网去加载,而这又是一个比较耗时的过程,所以Android中都是通过开启一个异步线程去加载.为了增加用户体验,给用 ...
- Android 图片异步加载的体会,SoftReference已经不再适用
在网络上搜索Android图片异步加载的相关文章,目前大部分提到的解决方案,都是采用Map<String, SoftReference<Drawable>> 这样软引用的 ...
- Android图片异步加载之Android-Universal-Image-Loader
将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就 ...
随机推荐
- JAVA进阶-注解
注解元数据分为4部分分别为Target,Documented,Inherited,Retention: Target>指定被注解的注解仅仅能使用在某个类型上;ElementType指定其类型:能 ...
- HTML页面的动画的制作及性能
原文:HTML页面的动画的制作及性能 WEB页面的动画的制作及性能 简介 目前WEB页面做动画的方式大的分两种1.JS间隔时间不断修改元素属性值,这也是CSS3出来前常用的做法,貌似也是唯一的做法.2 ...
- 谢绝艳照门 - 手把手教你把当今很hit的家庭监控IP Camera变得网络安全起来
IP Camerars现在已经越来越便宜了,很多人都可以买得起,并且大家也乐意去购买,因为它们的确是用来监控你在高房价的中国购买的爱巢的非常便利的设备.当然,配套的监控应用也层出不穷,从通用的家庭安全 ...
- 轻量级IOC框架Guice
java轻量级IOC框架Guice Guice是由Google大牛Bob lee开发的一款绝对轻量级的java IoC容器.其优势在于: 速度快,号称比spring快100倍. 无外部配置(如需要使用 ...
- 使用AutoTools自动生成Makefile
前两天赶时间写了个简易的数据库系统,实现了简单的增删改查等功能.因为赶实验...无节操的我用shell实现的文件读写...咳咳...这都不是重点,重点是自己写Makefile感觉有点不伦不类...虽然 ...
- 工欲善其事:编辑器之神Vim(一)
本篇文章收集了Vim最常用和实用的一些命令,掌握这些命令就可以使用Vim了 本文仅列举个人认为常用的命令,本系列文章更像是自己的学习笔记,而不是VIM使用教程. 如果你想了解vim的更多,可以看看Co ...
- cocos2dx对于强大的RichText控制
最近准备做一个聊天系统,开始准备使用cocos2dx的UIRichText控制显示屏聊天,在使用中发现的结果,cocos2dx的RichText很有限.全然不具备实现聊天的功能.仅仅实现了增加文本.图 ...
- javascript 学习总结(二)Array数组
1.数组常用方法 var colors = ["red", "blue", "green"]; //creates an array wit ...
- 开发环境准备:Ruby on Rails开发环境配置
开发环境准备:Ruby on Rails开发环境配置 前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完 ...
- CSS知识点:选择符
一.选择符的种类 1)通配选择符 它用来给页面所有的元素设置样式 *{margin:0;padding:0;}.但是实际当中不建议这么用,页面中用到了哪些样式,就统一设置样式,因为*影响性能.也可以给 ...