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

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


1.一款A(yù)PP,加載顯示圖片怎樣才能讓用戶有最佳的使用體驗(yàn)?zāi)兀?/h3>

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

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

2.SDWebImage加載圖片過(guò)程簡(jiǎn)單介紹

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

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

3.根據(jù)網(wǎng)絡(luò)狀態(tài)我們?cè)撛鯓尤ゼ虞d圖片呢?

Snip20160723_2.png

4.上述過(guò)程的封裝

/**
 * 根據(jù)網(wǎng)絡(luò)狀態(tài),加載對(duì)應(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{
    //查看沙盒中是否有原圖,有原圖顯示原圖,沒(méi)有原圖考慮下載
    UIImage *bigImage =[[SDImageCache sharedImageCache]imageFromDiskCacheForKey:oringinalImageUrl];
    if (bigImage) {//有原圖
        [self sd_setImageWithURL:[NSURL URLWithString:oringinalImageUrl] placeholderImage:placeholderImage completed:completedBlock];
    }else {//沒(méi)有原圖
        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è)置查看用戶是怎么設(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 {//沒(méi)網(wǎng)有略縮圖顯示略縮圖,沒(méi)有顯示占位圖
            
            UIImage *smallImage =[[SDImageCache sharedImageCache]imageFromDiskCacheForKey:thumbnailImageURL];
            if (smallImage) {//有略縮圖
                [self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholderImage completed:completedBlock];
            }else {//沒(méi)有略縮圖
                [self sd_setImageWithURL:nil placeholderImage:placeholderImage completed:completedBlock];
            }
        }
        
    }
}

今后,一步就能搞定根據(jù)網(wǎng)絡(luò)狀態(tài)加載圖片主的問(wèn)題

   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)
    }];

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

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

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

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