無圖模式(省流量模式)的實現(xiàn)

在項目中為了提升用戶體驗增显,需要在2G/3G/4G網(wǎng)絡情況下耙替,提供一個無圖模式(省流量模式)。我們的APP需求是:在用戶開啟了無圖模式之后什往,如果當前網(wǎng)絡是2G/3G/4G網(wǎng)絡,則項目中加載圖片的地方需要顯示“點擊加載圖片”慌闭,當用戶確認點擊的情況下别威,才去加載圖片。

無圖模式下的判斷邏輯如下:

  • 如果目標圖片之前已經(jīng)加載過了驴剔,則顯示已經(jīng)加載過的圖片省古;
  • 如果目標圖片之前沒有加載過,則只顯示一個placeholderImage丧失,并且顯示文案“點擊加載圖片”豺妓,當用戶確認點擊之后,再加載目標圖片。

幾點說明:

  • 為了方便管理圖片以及判斷圖片是否已經(jīng)加載過科侈,這里使用第三方庫SDWebImage來管理载佳。
  • 網(wǎng)絡情況判斷推薦使用Reachability第三方庫。

實現(xiàn)思路:

因為項目中之前已經(jīng)使用了SDWebImage對圖片進行管理臀栈,為了快速實現(xiàn)這個功能,這里創(chuàng)建了UIButton和UIImageView的擴展挠乳,并在擴展中新增了網(wǎng)絡加載圖片的方法权薯。當開啟了無圖模式并且目標圖片沒有加載過時,將一個相同大小的UIButton---coverButton加在當前視圖(UIButton或UIImageView)上睡扬,coverButton負責顯示“點擊加載圖片”以及點擊事件響應盟蚣。

下面直接上代碼(以UIButton為例):

#import "UIButton+YLNoImageModel.h"
#import "UIButton+WebCache.h"
#import "objc/runtime.h"
#import "UIImage+YLResize.h"

static void *kCoverButtonTag = &kCoverButtonTag;        ///< 覆蓋按鈕,點擊加載
static void *kLoadImageUrl = &kLoadImageUrl;            ///< 圖片url
static void *kHolderImage = &kHolderImage;              ///< 占位圖片

@implementation UIButton (YLNoImageModel)
-(void)yl_setNoImageModelWithUrl:(NSURL *)url placeHolderImage:(UIImage *)holder
{
    UIImage *holderImg = [holder resizeToSize:self.bounds.size];
    
    if(kYLNoImageModeIsAvaliable){
        //開啟了無圖模式
        //異步判斷是否已經(jīng)加載過了當前圖片
        [[SDWebImageManager sharedManager]cachedImageExistsForURL:url completion:^(BOOL isInCache) {
            if(isInCache){
                //如果已經(jīng)加載過了卖怜,直接加載
                if(self.coverButton){
                    [self.coverButton removeFromSuperview];
                }
                
                [self sd_setImageWithURL:url forState:UIControlStateNormal
                        placeholderImage:holderImg];
            }else{
                //如果沒有加載過屎开,則顯示點擊查看顯示圖片
                [self setImage:holderImg forState:UIControlStateNormal];
                self.loadImageUrl = url;
                self.holderImage = holderImg;
                
                if(!self.coverButton){
                    self.coverButton = [UIButton buttonWithType:UIButtonTypeCustom];
                    self.coverButton.titleLabel.font = [UIFont systemFontOfSize:20];
                    [self.coverButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                    [self.coverButton setTitle:@"點擊加載圖片" forState:UIControlStateNormal];
                    self.coverButton.contentMode = UIViewContentModeCenter;
                }
                [self.coverButton addTarget:self action:@selector(coverButtonAction) forControlEvents:UIControlEventTouchUpInside];
                self.coverButton.frame = self.bounds;
                [self addSubview:self.coverButton];
            }
        }];
    }else{
        //未開啟無圖模式
        if(self.coverButton){
            [self.coverButton removeFromSuperview];
        }
        
        [self sd_setImageWithURL:url forState:UIControlStateNormal placeholderImage:holderImg];
    }
}

-(UIButton *)coverButton
{
    return (UIButton *)objc_getAssociatedObject(self, kCoverButtonTag);
}

-(void)setCoverButton:(UIButton *)btn
{
    objc_setAssociatedObject(self, kCoverButtonTag, btn, OBJC_ASSOCIATION_RETAIN);
}

-(NSURL *)loadImageUrl
{
    return (NSURL *)objc_getAssociatedObject(self, kLoadImageUrl);
}

-(void)setLoadImageUrl:(NSURL *)url
{
    objc_setAssociatedObject(self, kLoadImageUrl, url, OBJC_ASSOCIATION_COPY);
}

-(UIImage *)holderImage
{
    return (UIImage *)objc_getAssociatedObject(self, kHolderImage);
}

-(void)setHolderImage :(UIImage *)img
{
    objc_setAssociatedObject(self, kHolderImage, img, OBJC_ASSOCIATION_RETAIN);
}

-(void)coverButtonAction
{
    if(self.coverButton){
        [self.coverButton removeFromSuperview];
    }
    
    [self sd_setImageWithURL:self.loadImageUrl forState:UIControlStateNormal placeholderImage:self.holderImage];
}

@end

至于網(wǎng)絡條件判斷,請參考Reachability马靠,在項目中監(jiān)聽到網(wǎng)絡改變之后保存一個標示kYLNoImageModeIsAvaliable在本地奄抽。

使用方法詳見:YLNoImageModel

以上是我的實現(xiàn)方法,如果有其他更好的實現(xiàn)方法甩鳄,請在文章后面留言告訴我一聲逞度,謝謝!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妙啃,一起剝皮案震驚了整個濱河市档泽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌揖赴,老刑警劉巖馆匿,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異燥滑,居然都是意外死亡渐北,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門突倍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腔稀,“玉大人,你說我怎么就攤上這事羽历『嘎玻” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵秕磷,是天一觀的道長诵闭。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么疏尿? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任瘟芝,我火速辦了婚禮,結(jié)果婚禮上褥琐,老公的妹妹穿的比我還像新娘锌俱。我一直安慰自己,他們只是感情好敌呈,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布贸宏。 她就那樣靜靜地躺著,像睡著了一般磕洪。 火紅的嫁衣襯著肌膚如雪吭练。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天析显,我揣著相機與錄音鲫咽,去河邊找鬼。 笑死谷异,一個胖子當著我的面吹牛分尸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晰绎,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼寓落,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荞下?” 一聲冷哼從身側(cè)響起伶选,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尖昏,沒想到半個月后仰税,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡抽诉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年陨簇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迹淌。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡河绽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唉窃,到底是詐尸還是另有隱情耙饰,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布纹份,位于F島的核電站苟跪,受9級特大地震影響廷痘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜件已,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一笋额、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篷扩,春花似錦兄猩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歼狼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間享怀,已是汗流浹背羽峰。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留添瓷,地道東北人梅屉。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像鳞贷,于是被迫代替她去往敵國和親坯汤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫搀愧、插件惰聂、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 在給孩子的新課桌與書柜的組合安裝好后,欣賞著孩子的新課桌之時我不由得想起我多年以前咱筛,寫作業(yè)沒有課桌而渴望得...
    Sencer閱讀 297評論 0 1
  • 1.理想國 【一句話推薦理由】 老老老老老一輩關于人性搓幌、政治、哲學的深刻探討迅箩,里面的觀點歷久彌新溉愁。最重要的是,這本...
    斯坦威閱讀 3,691評論 0 14
  • 相信各位未準媽媽們都有一些孕前控制體重的意識了饲趋,太胖太瘦都不利于受孕拐揭,就算受孕了也對寶寶的健康有一些不利因素;那么...
    孕婦注意事項閱讀 557評論 0 0
  • 只會畫眼睛
    嗜血如茗閱讀 167評論 0 0