文档章节

​iOS之路13-SDWebImage 框架的基本使用

Eric-osc
 Eric-osc
发布于 2016/02/02 18:43
字数 855
阅读 92
收藏 1

SDWebImage 框架的基本使用

  1. 首先要看readme

    这是我的翻译

    这个库提供了一个UIImageView的分类,可以从网络远端加载图片

    它提供了:

  1. 一个UIImageView的分类加载网络图片和缓存管理

  2. 异步加载图片

  3. 异步内存和磁盘缓存是自动缓存处理

  4. 支持GIF

  5. 支持网页格式

  6. 支持背景图片解压缩

  7. 在一个期限内,相同的URL将不会被重复下载

  8. 错误的URL将不会被重试下载

  9. 在这个时间内,主线程将不会被阻碍

  10. 使用的是GCDARC

  11. 支持Arm64处理器

 

1.通过git 命令下载SDWebImage,这样可以得到最新版本

git clone https://github.com/rs/SDWebImage.git

 

2.不知道官方文档为什么使用尖括号导入,注意改成双引号

#import <SDWebImage/UIImageView+WebCache.h>

Using UIImageView+WebCache category with UITableView

使用 UIImageView+WebCache 分类用于TableView

Just #import the UIImageView+WebCache.h header, and call the sd_setImageWithURL:placeholderImage: method from the tableView:cellForRowAtIndexPath: UITableViewDataSource method. Everything will be handled for you, from async downloads to caching management.

仅仅需要导入 UIImageView+WebCache.h 头文件,然后调用sd_setImageWithURL:方法在tabelView的cellForRowAtIndexPath方法中使用,这是从网络异步加载图片到缓存的方法都实现了

#import "ViewController.h"
// 导入头文件的时候注意使用双引号
#import "SDWebImage/UIImageView+WebCache.h"

@interface ViewController ()<UITableViewDataSource>
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
}
 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 10;
}
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"MyIdentifier";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:MyIdentifier];
    }
    
    // 这里的图片url要自己更换一下,占位图片也自己选择一下
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://img1.3lian.com/img2008/05/003/023.jpg"]
                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    
    cell.textLabel.text = @"My Text";
    return cell;
}

直接运行即可,测试运行效果

With blocks, you can be notified about the image download progress and whenever the image retrieval has completed with success or not:

neither your success nor failure block will be call if your image request is canceled before completion.

这是带block的回调的方法,你可以关注图片下载进度和图片是否下载成功

除非你的图片请求被取消在调用block之前,否则无论block是否成功还是失败都将会被调用

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://img1.3lian.com/img2008/05/003/023.jpg"]
                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]
                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
                                 if(error) {
                                     NSLog(@"下载失败");
                                 }else {
                                     NSLog(@"下载成功");
                                 }
                             }];
                             
运行结果:
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功
SDWebImage使用[6118:399525] 下载成功

Using SDWebImageManager

使用单例管理类

The SDWebImageManager is the class behind the UIImageView+WebCache category. It ties the asynchronous downloader with the image cache store. You can use this class directly to benefit from web image downloading with caching in another context than a UIView (ie: with Cocoa).

Here is a simple example of how to use SDWebImageManager:

这个单例管理类是异步下载到图片缓存都做了,

    SDWebImageManager *manager = [SDWebImageManager sharedManager];
    NSURL *imageURL = [NSURL URLWithString:@"http://img1.3lian.com/img2008/05/003/023.jpg"];
    [manager downloadImageWithURL:imageURL
                          options:0
                         progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                             NSLog(@"加载中 ");
                         }
                        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                            if (image) {
                                NSLog(@"图片缓存完成");
                            }
                        }];
    // 打印沙盒目录,查看Cache目录下会有相应的图片
    NSString *path = NSHomeDirectory();//主目录
    NSLog(@"NSHomeDirectory:%@",path);


© 著作权归作者所有

Eric-osc
粉丝 4
博文 23
码字总数 7046
作品 0
东城
私信 提问
使用SDWebImage时常遇到的问题

1. 图片文件缓存的时间有多长:1周 2. SDWebImage 的内存缓存是用什么实现的? 3. SDWebImage 的最大并发数是多少? 4. SDWebImage 支持动图吗?GIF 5. SDWebImage的最大超时时长 6. SDWebIm...

_小迷糊
2018/05/07
0
0
IOS使用SDWebImage出现unsupported parameter combination警告的解决方案

IOS使用SDWebImage出现下列类似警告的解决方案 CGBitmapContextCreate: unsupported parameter combination: 16 integer bits/component; 64 bits/pixel; 3-component color space; kCGImag......

开源中国搬砖小能手
2015/04/18
0
0
SDWebImage 4.1.1 发布,iOS 图片加载框架

SDWebImage 4.1.1 已发布,SDWebImage 是非常流行的 iOS 图片加载框架,提供了一个 UIImageView 的 category 用来加载网络图片并且对网络图片的缓存进行管理,采用异步方式来下载网络图片。更...

王练
2017/10/09
512
0
常用iOS开发网站资源

图标 https://icomoon.io/app/#/select http://iconfont.cn/repositories http://www.iconfont.cn Api数据接口 聚合数据:http://www.juhe.cn 百度APIStore:http://apistore.baidu.com 医药......

请天点
2016/12/29
185
0
SDWebImage 4.3.1 发布,iOS 图片加载框架

SDWebImage 4.3.1 已发布,这是针对 4.3.0 的一个修复和改进版本。 SDWebImage 是非常流行的 iOS 图片加载框架,提供了一个 UIImageView 的 category 用来加载网络图片并且对网络图片的缓存进...

王练
2018/02/26
642
0

没有更多内容

加载失败,请刷新页面

加载更多

texlive安装

Installing to: D:/bin/texlive/texlive/2019Installing [001/307, time/total: ??:??/??:??]: adobemapping [2130k]Installing [002/307, time/total: 00:03/08:57]: ae [84k]Installing......

MtrS
今天
2
0
运维规范

命名规范 发布流程 监控告警 故障定位 状态 日志 监控

以谁为师
今天
2
0
约瑟夫环(报数游戏)java实现

开端 公司组织考试,一拿到考题,就是算法里说的约瑟夫环,仔细想想 以前老师将的都忘了,还是自己琢磨把~ package basic.gzy;import java.util.Iterator;import java.util.LinkedList;...

无极之岚
今天
3
0
Kernel字符设备驱动框架

Linux设备分为三大类:字符设备,块设备和网络设备,这三种设备基于不同的设备框架。相较于块设备和网络设备,字符设备在kernel中是最简单的,也是唯一没有基于设备基础框架(device结构)的...

yepanl
今天
3
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部