iOS--异步加载图片的ImageView和Button

在开发过程中,难免遇到需要下载图片来进行展示的情况,而鉴于网络等因素的存在,有时候下载图片会很快,但有时就会很慢。这时候就不应该阻塞用户而进行图片下载。

下面写了两个子类,一个是UIImageView的子类,另一个是UIButton的子类,它们都能实现图片的异步下载展示。

本文Demo在Github上:https://github.com/gaussli/AsynImageViewAndButtonDemo

本文的思路来源于网上的开发者,具体是在哪里看见的就忘记了0.0  。  无论如何,感觉他们。


步骤:

1. 导入必要的文件

1)导入JHAsynView文件夹,其中AsynImageButton.h和AsynImageButton.m就是异步加载图片的UIButton子类;AsynImageView.h和AsynImageView.m就是异步加载图片的UIImageView子类;JHMacroDefinition.h为一些常量或函数的宏定义。

2)由于需要使用网络,这里我使用的是著名的网络开源项目ASIHTTPRequest,导入该项目。

3)还是网络的原因,导入系统框架:CFNetwork.framework和libz.dylib。

3)如需要一张默认图片,则新增一张,Demo中的默认图片是“default_image.png”。

2. 由于ASIHTTPRequest项目是非ARC的,于是需要到Build Phases --> Compile Sources 处把于该项目相关的类添加“-fno-objc-arc”的Compiler Flags

结果如下图:


3. 声明和初始化AsynImageView和AsynImageButton对象

// MainViewController.h文件中
@property (nonatomic, strong) AsynImageButton *button;
@property (nonatomic, strong) AsynImageView *imageView;


// MainViewController.m文件中
_button = [[AsynImageButton alloc] initWithFrame:CGRectMake(0, JH_STATUSBAR_HEIGHT, JH_SCREEN_WIDTH/2.0, JH_SCREEN_WIDTH/2.0)];
_imageView = [[AsynImageView alloc] initWithFrame:CGRectMake(0, JH_STATUSBAR_HEIGHT+JH_SCREEN_WIDTH/2.0+10, JH_SCREEN_WIDTH/2.0, JH_SCREEN_WIDTH/2.0)];


4. 调用- (void) initAsynImageWithPlaceholderImage: (UIImage)placeholderImage andImagePath: (NSString)imagePath andImageLocalPath: (NSString*)imageLocalPath;实现图片异步加载, 其中参数placeholderImage是默认图片对象,参数imagePath是图片URL字符串,参数imageLocalPath是图片本地缓存路径字符串。Demo使用两个来源于百度的图片

[_button initAsynImageWithPlaceholderImage:[UIImage imageNamed:@"default_image"] andImagePath:@"http://c.hiphotos.baidu.com/image/h%3D200/sign=b714c6e5d639b60052ce08b7d9513526/b58f8c5494eef01f98f3ddc3e3fe9925bd317dd5.jpg" andImageLocalPath:[JH_SANDBOX_DOCUMENTS_PATH stringByAppendingPathComponent:@"b58f8c5494eef01f98f3ddc3e3fe9925bd317dd5.jpg"]];
[_imageView initAsynImageWithPlaceholderImage:[UIImage imageNamed:@"default_image"] andImagePath:@"http://c.hiphotos.baidu.com/image/h%3D200/sign=946a240fb5003af352badb60052bc619/8d5494eef01f3a298f4c11c89a25bc315c607c34.jpg" andImageLocalPath:[JH_SANDBOX_DOCUMENTS_PATH stringByAppendingPathComponent:@"8d5494eef01f3a298f4c11c89a25bc315c607c34.jpg"]];
    [self.view addSubview:_imageView];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值