根據(jù)網(wǎng)絡狀態(tài)顯示圖片(封裝SDWebImage,一行代碼搞定復雜業(yè)務邏輯)

SDWebImage是目前非常流行的可用于發(fā)送網(wǎng)絡請求,加載圖片的三方框架。功能強大,使用簡單。這里我們討論的不是SDWebImage加載圖片的內(nèi)部實現(xiàn)細節(jié),而是在其基礎上進一步封裝,站在用戶體驗的角度上考慮如何加載圖片才能達到最佳用戶體驗。


1.一款APP,加載顯示圖片怎樣才能讓用戶有最佳的使用體驗呢?

根據(jù)手機網(wǎng)絡狀態(tài)的不同,站在用戶的角度上,應該做好以下幾點:

  • ** 省錢:**能不用花自己錢的流量,就不用;不得不用時,節(jié)約,盡量少用;免費流量,大膽用。
  • 優(yōu)質(zhì)畫面:在省錢,節(jié)約流量的前提下,盡量給用戶最佳的視覺體驗。

2.SDWebImage加載圖片過程簡單介紹

sd_setImageWithURL:placeholderImage:方法執(zhí)行步驟

  • 1.取消當前ImageView關聯(lián)的請求;
  • 2.設置占位圖片到ImageView上去
  • 3.如果緩存中有圖片就去緩存加載(緩存-->磁盤)
  • 4.沒有就發(fā)送網(wǎng)絡請求給服務器,加載圖片
    注意:該方法不是直接就去發(fā)送網(wǎng)絡請求給服務器,請求加載圖片的,在這之前會先去內(nèi)存和緩存中查看是否有現(xiàn)成的圖片,有就不會發(fā)送網(wǎng)絡請求。

3.根據(jù)網(wǎng)絡狀態(tài)我們該怎樣去加載圖片呢?

Snip20160723_2.png

4.上述過程的封裝

/**
 * 根據(jù)網(wǎng)絡狀態(tài),加載對應圖片
 * @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 這里是模擬的,真實情況需要去偏好設置查看用戶是怎么設置的
            if (alwaysLoadOriginalSource) {//用戶設置總是加載原圖
                [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)絡狀態(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)
    }];

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

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評論 25 709
  • 前不久做了一個生成快照的需求,其中用到 SDWebImage 來下載圖片,在使用該框架的過程中也遇到了一些問題,索...
    ShannonChenCHN閱讀 14,298評論 12 241
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,158評論 4 61
  • 用了一下午看完。 原來這就是推理小說的魅力。 緩緩展開的劇情,看似漫無邊際、絮絮叨叨,但在閱讀的過程中,拿著作者遞...
    森森愛咳咳閱讀 805評論 0 0
  • 嗨,這里是loewy(緊張) 經(jīng)過朋友推薦,了解了簡書,不拐彎抹角,我就是來搞事情的(噗),好吧,其實是來練練文筆...
    Ladyloewy閱讀 146評論 0 0

友情鏈接更多精彩內(nèi)容