SDWebImage簡單使用

SDWebImage是一個三方類庫, 所以要使用它首先要把它引入我們的工程, 其托管在github上:https://github.com/rs/SDWebImage

有幾種引入的方法, 一種是直接使用cocoaPods下載安裝, 還有一種是直接拉入文件夾, 我們就演示這一種了

第一步: 把下載好的Demo中的"SDWebImage"文件拖入工程, 記得勾選


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


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


OK! 現(xiàn)在我們可以進入正題了, 官方是在UITableView中演示的SDWebImage的使用,我覺得tabView的顯示沒集合視圖的好看, 所以我就用UICOllectionView來演示了

先引入SDWebImage的頭文件: #import "UIImageView+WebCache.h"


創(chuàng)建集合視圖, 這步省略了, 也可以用UITableView;

搜索一些圖片的url, 創(chuàng)建為全局變量, 因為后面還要使用


老版本的SDWebImage中的方法和新版本的有些許的不同, 就是新版本的方法新都有"sd_"的前綴. 我用的是新版本的,所以如果你找的是舊版本的話會發(fā)現(xiàn)我們的方法不太一樣

先來一個基本的語句吧: - (void)sd_setImageWithURL:(NSURL *)urlplaceholderImage:(UIImage *)placeholder


UIImageView調用它, url是要下載的圖片的url,placeholder是在圖片還沒下載完成是imgView顯示的占位圖片, 當圖片下載完成后, 它會被替換成下載好的圖片,如圖:


其中的四張相同的圖片就是我設置的占位圖片.

再創(chuàng)建一個ViewController, 用以顯示每張縮略圖的大圖, 并push進去, 把小圖的indexPath,和urlString傳入

SDWebImage除了剛才用的那種外還有幾種比較簡單的方法, 總的代碼總結如下:

//1. 基本語句, 異步加載及緩存圖片一步到位

[imgView sd_setImageWithURL: url placeholderImage: [UIImageimageNamed:@"3"]];

//2. 讀取緩存, 有占位圖片, 可從url下載圖片

//Handle image refresh(控制圖像刷新)

//默認情況下,SDWebImage確實非常積極的緩存。它忽略了所有類型的通過HTTP服務器返回的緩存控制頭,并且沒有時間限制地緩存返回的圖像。這意味著你的圖像url是永遠不會改變的、指向圖像的靜態(tài)url。如果指向的圖片發(fā)生了變化,那么url也會相應的跟著變化。如果你不控制你的圖像服務器,當它的內容更新時你不能改變它的url。Facebook頭像就是這種情況的例子。在這種情況下,你可以使用SDWebImageRefreshCached的標志。這將稍微降低性能,但將會考慮到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,你將被告知下載進度,完成時是成功還是失?。?/p>

[imgView sd_setImageWithURL:url placeholderImage:[UIImageimageNamed:@"3"] completed:^(UIImage *image, NSError *error,SDImageCacheType cacheType, NSURL *imageURL) {

if (error) {

NSLog(@"%@", error);

}

}];

//6. 獨立地使用異步圖像下載

[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:urloptions:0 progress:^(NSInteger receivedSize, NSIntegerexpectedSize) {

} completed:^(UIImage *image, NSData *data, NSError *error, BOOLfinished) {

if (image && finished) {

imgView.image = image;

}

}];

最后效果圖:



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容