首先到官方的github下載
++https://github.com/rs/SDWebImage++
把解壓出的SDWebImage文件夾導(dǎo)入到項(xiàng)目中
因?yàn)閕OS9中新增App Transport Security(簡(jiǎn)稱ATS)特性, 主要使到原來請(qǐng)求的時(shí)候用到的HTTP恋追,都轉(zhuǎn)向TLS1.2協(xié)議進(jìn)行傳輸。這也意味著所有的HTTP協(xié)議都強(qiáng)制使用了HTTPS協(xié)議進(jìn)行傳輸。所以我們需要在info.plist文件中添加一段代碼
- 右鍵info.plist Open As Source code 添加
以下這段代碼
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
如果不添加直接進(jìn)行HTTP請(qǐng)求是會(huì)收到如下錯(cuò)誤提示:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
正式使用
- 在你需要使用的地方導(dǎo)入頭文件
#import "SDWebImage/UIImageView+WebCache.h"
-
調(diào)用sd_setImageWithURL:placeholderImage:方法,placeholderImage可以加一個(gè)顯示正在加載中的小圖片
[_imageView sd_setImageWithURL:[NSURL URLWithString:@"http://fdfs.xmcdn.com/group18/M00/C5/A0/wKgJJVfDxfSwPSdDAAOUTzQfOSs424_ios_large.jpg"] placeholderImage:[UIImage imageNamed:@"加載中"]];
MRC
因?yàn)镾DWebImage默認(rèn)是在ARC中使用的如果在MRC中使用需要繼續(xù)如下幾步
-
在Build Settings中將
設(shè)為YES
- 在Targets中如下,在每個(gè)SDWebImage文件后面添加-fobjc-arc
設(shè)置imageView的圖片
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placehoder"]];
設(shè)置圖片并計(jì)算下載進(jìn)度
//下載并設(shè)置圖片
/*
第一個(gè)參數(shù):要下載圖片的url地址
第二個(gè)參數(shù):設(shè)置該imageView的占位圖片
第三個(gè)參數(shù):傳一個(gè)枚舉值,告訴程序你下載圖片的策略是什么
第一個(gè)block塊:獲取當(dāng)前圖片數(shù)據(jù)的下載進(jìn)度
receivedSize:已經(jīng)下載完成的數(shù)據(jù)大小
expectedSize:該文件的數(shù)據(jù)總大小
第二個(gè)block塊:當(dāng)圖片下載完成之后執(zhí)行該block中的代碼
image:下載得到的圖片數(shù)據(jù)
error:下載出現(xiàn)的錯(cuò)誤信息
SDImageCacheType:圖片的緩存策略(不緩存,內(nèi)存緩存幢炸,沙盒緩存)
imageURL:下載的圖片的url地址
*/
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placehoder"] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
//計(jì)算當(dāng)前圖片的下載進(jìn)度
NSLog(@"%.2f",1.0 *receivedSize / expectedSize);
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
}];
系統(tǒng)級(jí)內(nèi)存警告如何處理
//取消當(dāng)前正在進(jìn)行的所有下載操作
[[SDWebImageManager sharedManager] cancelAll];
//清除緩存數(shù)據(jù)
//cleanDisk:刪除過期的文件數(shù)據(jù),計(jì)算當(dāng)前未過期的已經(jīng)下載的文件數(shù)據(jù)的大小,如果發(fā)現(xiàn)該數(shù)據(jù)大小大于我們?cè)O(shè)置的最大緩存數(shù)據(jù)大小麻蹋,那么程序內(nèi)部會(huì)按照按文件數(shù)據(jù)緩存的時(shí)間從遠(yuǎn)到近刪除,知道小于最大緩存數(shù)據(jù)為止焊切。
//clearMemory:直接刪除文件扮授,重新創(chuàng)建新的文件夾
//[[SDWebImageManager sharedManager].imageCache cleanDisk];
[[SDWebImageManager sharedManager].imageCache clearMemory];
- SDWebImage默認(rèn)的緩存時(shí)間是1周
如何播放gif圖片
/*
5-1 把用戶傳入的gif圖片->NSData
5-2 根據(jù)該Data創(chuàng)建一個(gè)圖片數(shù)據(jù)源(NSData->CFImageSourceRef)
5-3 計(jì)算該數(shù)據(jù)源中一共有多少幀,把每一幀數(shù)據(jù)取出來放到圖片數(shù)組中
5-4 根據(jù)得到的數(shù)組+計(jì)算的動(dòng)畫時(shí)間-》可動(dòng)畫的image
[UIImage animatedImageWithImages:images duration:duration];
*/
如何判斷當(dāng)前圖片類型专肪,只判斷圖片二進(jìn)制數(shù)據(jù)的第一個(gè)字節(jié)
+ (NSString *)sd_contentTypeForImageData:(NSData *)data;
內(nèi)部如何進(jìn)行緩存處理刹勃?
使用了NSCache類,使用和NSDictionary類似
- 沙盒緩存圖片的命名方式為對(duì)該圖片的URL進(jìn)行MD5加密 echo -n "url" |MD5
- 當(dāng)接收到內(nèi)存警告之后嚎尤,內(nèi)部會(huì)自動(dòng)清理內(nèi)存緩存
圖片的下載順序荔仁,默認(rèn)是先進(jìn)先出的