iOS中SDWebImage怎么用?
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
由于要監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài),在這里筆者推薦使用AFNetWorking。
1)在GitHub或者利用cocoaPod給項(xiàng)目導(dǎo)入第三方框架AFNetWorking。
2)在AppDelegate.m文件中的application:didFinishLaunchingWithOptions:方法中監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)。
// AppDelegate.m 文件中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 監(jiān)控網(wǎng)絡(luò)狀態(tài)
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
// 以下代碼在需要監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)的方法中使用
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下載原圖
} else { // 其他,下載小圖
}
}
這時(shí)就會(huì)有iOS學(xué)習(xí)者開(kāi)始抱怨:這不是很簡(jiǎn)單嗎?于是三下五除二寫(xiě)完了以下代碼。
// 利用MVC,在設(shè)置cell的模型屬性時(shí)候,下載圖片
- setItem:(CustomItem *)item
{
_item = item;
UIImage *placeholder = [UIImage imageNamed:@“placeholderImage”];
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下載原圖
[self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder];
} else { // 其他,下載小圖
?。踫elf.imageView sd_setImageWithURL:[NSURL URLWithString:item.thumbnailImage] placeholderImage:placeholder];
}
}
此時(shí),確實(shí)能完成基本的按照當(dāng)前網(wǎng)絡(luò)狀態(tài)下載對(duì)應(yīng)的圖片,但是真實(shí)開(kāi)發(fā)中,這樣其實(shí)是不合理的。以下是需要注意的細(xì)節(jié):
1)SDWebImage會(huì)自動(dòng)幫助開(kāi)發(fā)者緩存圖片(包括內(nèi)存緩存,沙盒緩存),所以我們需要設(shè)置用戶(hù)在WiFi環(huán)境下下載的高清圖,下次在蜂窩網(wǎng)絡(luò)狀態(tài)下打開(kāi)應(yīng)用也應(yīng)顯示高清圖,而不是去下載縮略圖。
2)許多應(yīng)用設(shè)置模塊帶有一個(gè)功能:移動(dòng)網(wǎng)絡(luò)環(huán)境下仍然顯示高清圖。這個(gè)功能其實(shí)是將設(shè)置記錄在沙盒中,關(guān)于數(shù)據(jù)保存到本地,可以查看本人另一篇簡(jiǎn)書(shū)首頁(yè)文章:iOS本地?cái)?shù)據(jù)存取,看這里就夠了。
3)當(dāng)用戶(hù)處于離線狀態(tài)時(shí)候,無(wú)法合理處理業(yè)務(wù)。
于是,開(kāi)始加以改進(jìn)。為了讓讀者你更容易理解,我先貼出偽代碼:
- setItem:(CustomItem *)item
{
_item = item;
if (緩存中有原圖)
{
self.imageView.image = 原圖;
} else
{
if (Wifi環(huán)境)
{
下載顯示原圖
} else if (手機(jī)自帶網(wǎng)絡(luò))
{
if (3G\4G環(huán)境下仍然下載原圖)
{
下載顯示原圖
} else
{
下載顯示小圖
}
} else
{
if (緩存中有小圖)
{
self.imageView.image = 小圖;
} else // 處理離線狀態(tài)
{
self.imageView.image = 占位圖片;
}
}
}
}
實(shí)現(xiàn)上面的偽代碼:讀者可以一一對(duì)應(yīng)上面的偽代碼。練習(xí)的時(shí)候推薦先寫(xiě)偽代碼,再寫(xiě)真實(shí)代碼
多多注意“注釋”解釋。
- setItem:(CustomItem *)item
{
_item = item;
// 占位圖片
UIImage *placeholder = [UIImage imageNamed:@“placeholderImage”];
// 從內(nèi)存\沙盒緩存中獲得原圖,
UIImage *originalImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.originalImage];
if (originalImage) { // 如果內(nèi)存\沙盒緩存有原圖,那么就直接顯示原圖(不管現(xiàn)在是什么網(wǎng)絡(luò)狀態(tài))
self.imageView.image = originalImage;
} else { // 內(nèi)存\沙盒緩存沒(méi)有原圖
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下載原圖
?。踫elf.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder];
} else if (mgr.isReachableViaWWAN) { // 在使用手機(jī)自帶網(wǎng)絡(luò)
// 用戶(hù)的配置項(xiàng)假設(shè)利用NSUserDefaults存儲(chǔ)到了沙盒中
// [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@“alwaysDownloadOriginalImage”];
// [[NSUserDefaults standardUserDefaults] synchronize];
#warning 從沙盒中讀取用戶(hù)的配置項(xiàng):在3G\4G環(huán)境是否仍然下載原圖
BOOL alwaysDownloadOriginalImage = [[NSUserDefaults standardUserDefaults] boolForKey:@“alwaysDownloadOriginalImage”];
if (alwaysDownloadOriginalImage) { // 下載原圖
[self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder];
} else { // 下載小圖
?。踫elf.imageView sd_setImageWithURL:[NSURL URLWithString:item.thumbnailImage] placeholderImage:placeholder];
}
} else { // 沒(méi)有網(wǎng)絡(luò)
UIImage *thumbnailImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.thumbnailImage];
if (thumbnailImage) { // 內(nèi)存\沙盒緩存中有小圖
self.imageView.image = thumbnailImage;
} else { // 處理離線狀態(tài),而且有沒(méi)有緩存時(shí)的情況
self.imageView.image = placeholder;
}
}
}
}
解決了嗎?真正的坑才剛剛開(kāi)始。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
iOS中SDWebImage怎么用?下載
相關(guān)電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復(fù)哪些問(wèn)題? 380
- 華為全新鴻蒙蓄勢(shì)待發(fā) 僅支持鴻蒙內(nèi)核和鴻蒙系統(tǒng)應(yīng)用 719
- 蘋(píng)果手機(jī)系統(tǒng)iOS 17遭用戶(hù)質(zhì)疑 731
- iPhone12輻射超標(biāo)?蘋(píng)果推送iOS 17.1解決此事 750
- 傳華為囤積零部件 目標(biāo)明年智能手機(jī)出貨7000萬(wàn)部;消息稱(chēng) MiOS 僅限國(guó)內(nèi),小米 28208
- 蘋(píng)果推送iOS17.0.3,解決iPhone15Pro系列存在機(jī)身過(guò)熱 216
- Testin云測(cè)兼容和真機(jī)服務(wù)平臺(tái)中上線iPhone 15系列手機(jī) 208
- 利爾達(dá)推出搭載HooRiiOS的Matter模組 145
- 運(yùn)放參數(shù)解析:輸入偏置電流(Ibias)和失調(diào)電流(Ios) 128
- 昆侖太科發(fā)布支持國(guó)產(chǎn)飛騰騰銳D2000芯片的開(kāi)源BIOS固件版本 448