SDWebImage是目前非常流行的可用于發(fā)送網(wǎng)絡(luò)請求,加載圖片的三方框架纵刘。功能強大邀窃,使用簡單。這里我們討論的不是SDWebImage加載圖片的內(nèi)部實現(xiàn)細節(jié)假哎,而是在其基礎(chǔ)上進一步封裝瞬捕,站在用戶體驗的角度上考慮如何加載圖片才能達到最佳用戶體驗鞍历。
1.一款A(yù)PP,加載顯示圖片怎樣才能讓用戶有最佳的使用體驗?zāi)兀?/h3>
根據(jù)手機網(wǎng)絡(luò)狀態(tài)的不同山析,站在用戶的角度上堰燎,應(yīng)該做好以下幾點:
- ** 省錢:**能不用花自己錢的流量,就不用笋轨;不得不用時秆剪,節(jié)約,盡量少用爵政;免費流量仅讽,大膽用。
- 優(yōu)質(zhì)畫面:在省錢钾挟,節(jié)約流量的前提下洁灵,盡量給用戶最佳的視覺體驗。
2.SDWebImage加載圖片過程簡單介紹
sd_setImageWithURL:placeholderImage:方法執(zhí)行步驟
- 1.取消當前ImageView關(guān)聯(lián)的請求掺出;
- 2.設(shè)置占位圖片到ImageView上去
- 3.如果緩存中有圖片就去緩存加載(緩存-->磁盤)
- 4.沒有就發(fā)送網(wǎng)絡(luò)請求給服務(wù)器徽千,加載圖片
注意:該方法不是直接就去發(fā)送網(wǎng)絡(luò)請求給服務(wù)器,請求加載圖片的汤锨,在這之前會先去內(nèi)存和緩存中查看是否有現(xiàn)成的圖片双抽,有就不會發(fā)送網(wǎng)絡(luò)請求。
3.根據(jù)網(wǎng)絡(luò)狀態(tài)我們該怎樣去加載圖片呢闲礼?
4.上述過程的封裝
/**
* 根據(jù)網(wǎng)絡(luò)狀態(tài)牍汹,加載對應(yīng)圖片
* @param oringinalImageUrl 原始圖片
* @param thumbnailImageURL 略縮圖
* @param palceHolderImage 占位圖片
* @param completedBlock 完成回調(diào)
*/
- (void)DKP_ImageWithOringinalImageURL:(NSString *)oringinalImageUrl thumbnailImageURL:(NSString *)thumbnailImageURL palceHolderImage:(UIImage *)placeholderImage completed:(SDWebImageCompletionBlock)completedBlock{
//查看沙盒中是否有原圖,有原圖顯示原圖柬泽,沒有原圖考慮下載
UIImage *bigImage =[[SDImageCache sharedImageCache]imageFromDiskCacheForKey:oringinalImageUrl];
if (bigImage) {//有原圖
[self sd_setImageWithURL:[NSURL URLWithString:oringinalImageUrl] placeholderImage:placeholderImage completed:completedBlock];
}else {//沒有原圖
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
if (manager.reachableViaWiFi) {//wifi,直接加載原圖
[self sd_setImageWithURL:[NSURL URLWithString:oringinalImageUrl] placeholderImage:placeholderImage completed:completedBlock];
}else if (manager.reachableViaWWAN) {//蜂窩網(wǎng)
BOOL alwaysLoadOriginalSource = YES;
# warning 這里是模擬的慎菲,真實情況需要去偏好設(shè)置查看用戶是怎么設(shè)置的
if (alwaysLoadOriginalSource) {//用戶設(shè)置總是加載原圖
[self sd_setImageWithURL:[NSURL URLWithString:oringinalImageUrl] placeholderImage:placeholderImage completed:completedBlock];
}else {//加載略縮圖
[self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholderImage completed:completedBlock];
}
}else {//沒網(wǎng)有略縮圖顯示略縮圖,沒有顯示占位圖
UIImage *smallImage =[[SDImageCache sharedImageCache]imageFromDiskCacheForKey:thumbnailImageURL];
if (smallImage) {//有略縮圖
[self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholderImage completed:completedBlock];
}else {//沒有略縮圖
[self sd_setImageWithURL:nil placeholderImage:placeholderImage completed:completedBlock];
}
}
}
}
今后锨并,一步就能搞定根據(jù)網(wǎng)絡(luò)狀態(tài)加載圖片主的問題
UIImageView *imageView = nil;//圖片顯示到ImageView上
NSString *bigPictureURL = nil;//大圖
NSString *smallPictureURL = nil;//小圖
UIImage *placeholder = nil;//占位圖
[imageView DKP_ImageWithOringinalImageURL:bigPictureURL thumbnailImageURL: smallPictureURL palceHolderImage: placeholder completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
//加載完成回調(diào)
}];