SDWebImage是一個(gè)三方類庫(kù), 所以要使用它首先要把它引入我們的工程, 其托管在github上:https://github.com/rs/SDWebImage
有幾種引入的方法, 一種是直接使用cocoaPods下載安裝, 還有一種是直接拉入文件夾, 我們就演示這一種了
第一步: 把下載好的Demo中的"SDWebImage"文件拖入工程, 記得勾選

第二步: 進(jìn)入Bulid Phases-->Link Binary With Libraries, 點(diǎn)擊'+',引入框架:ImageIO.framework, MapKit.framework, libxml2.2.dylib

第三步: 進(jìn)入Bulid Setting , 在搜索欄搜索other link, 修改Other Linker Flags為-ObjC:

OK! 現(xiàn)在我們可以進(jìn)入正題了, 官方是在UITableView中演示的SDWebImage的使用,我覺得tabView的顯示沒集合視圖的好看, 所以我就用UICOllectionView來(lái)演示了
先引入SDWebImage的頭文件: #import "UIImageView+WebCache.h"

創(chuàng)建集合視圖, 這步省略了, 也可以用UITableView;
搜索一些圖片的url, 創(chuàng)建為全局變量, 因?yàn)楹竺孢€要使用

老版本的SDWebImage中的方法和新版本的有些許的不同, 就是新版本的方法新都有"sd_"的前綴. 我用的是新版本的,所以如果你找的是舊版本的話會(huì)發(fā)現(xiàn)我們的方法不太一樣
先來(lái)一個(gè)基本的語(yǔ)句吧: - (void)sd_setImageWithURL:(NSURL *)urlplaceholderImage:(UIImage *)placeholder

UIImageView調(diào)用它, url是要下載的圖片的url,placeholder是在圖片還沒下載完成是imgView顯示的占位圖片, 當(dāng)圖片下載完成后, 它會(huì)被替換成下載好的圖片,如圖:

其中的四張相同的圖片就是我設(shè)置的占位圖片.
再創(chuàng)建一個(gè)ViewController, 用以顯示每張縮略圖的大圖, 并push進(jìn)去, 把小圖的indexPath,和urlString傳入
SDWebImage除了剛才用的那種外還有幾種比較簡(jiǎn)單的方法, 總的代碼總結(jié)如下:
//1. 基本語(yǔ)句, 異步加載及緩存圖片一步到位
[imgView sd_setImageWithURL: url placeholderImage: [UIImageimageNamed:@"3"]];
//2. 讀取緩存, 有占位圖片, 可從url下載圖片
//Handle image refresh(控制圖像刷新)
//默認(rèn)情況下,SDWebImage確實(shí)非常積極的緩存。它忽略了所有類型的通過HTTP服務(wù)器返回的緩存控制頭,并且沒有時(shí)間限制地緩存返回的圖像。這意味著你的圖像url是永遠(yuǎn)不會(huì)改變的、指向圖像的靜態(tài)url。如果指向的圖片發(fā)生了變化,那么url也會(huì)相應(yīng)的跟著變化。如果你不控制你的圖像服務(wù)器,當(dāng)它的內(nèi)容更新時(shí)你不能改變它的url。Facebook頭像就是這種情況的例子。在這種情況下,你可以使用SDWebImageRefreshCached的標(biāo)志。這將稍微降低性能,但將會(huì)考慮到HTTP緩存控制頭:
[imgView sd_setImageWithURL:url placeholderImage:[UIImageimageNamed:@"3"] options:SDWebImageRefreshCached];
//3. block
[imgView sd_setImageWithURL:url completed:^(UIImage *image, NSError*error, SDImageCacheType cacheType, NSURL *imageURL) {
if (image) {
imgView.image = image;
}
}];
//4. 管理
SDWebImageManager *imageManager = [SDWebImageManagersharedManager];
[imageManager downloadImageWithURL:url options:0progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *image, NSError *error, SDImageCacheTypecacheType, BOOL finished, NSURL *imageURL) {
if (image) {
imgView.image = image;
}
}];
//5. 使用blocks,你將被告知下載進(jìn)度,完成時(shí)是成功還是失敗:
[imgView sd_setImageWithURL:url placeholderImage:[UIImageimageNamed:@"3"] completed:^(UIImage *image, NSError *error,SDImageCacheType cacheType, NSURL *imageURL) {
if (error) {
NSLog(@"%@", error);
}
}];
//6. 獨(dú)立地使用異步圖像下載
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:urloptions:0 progress:^(NSInteger receivedSize, NSIntegerexpectedSize) {
} completed:^(UIImage *image, NSData *data, NSError *error, BOOLfinished) {
if (image && finished) {
imgView.image = image;
}
}];
最后效果圖:
