iOS中加載Gif圖的正確姿勢

昨天無意中看到一個(gè)帖子,寫如何加載gif圖的设联,感覺好麻煩的樣子善已,本來很簡單的一件事,為什么搞的這么復(fù)雜呢离例? ~~~

的確换团,App上有的地方能夠顯示一些動態(tài)圖(gif圖)那對用戶體驗(yàn)來說可是極好的,絕對是App的加分亮點(diǎn)宫蛆,逼格立馬上了好幾個(gè)臺階

But

我們都知道iOS中顯示圖片的控件是UIImageView艘包,但是UIImageView不支持.gif格式的圖片,那么怎么才能正確的加載一個(gè)gif圖呢洒扎?

其實(shí)辑甜,仔細(xì)想想,除了UIImageView可以加載圖片之外袍冷,就沒有別的系統(tǒng)控件了么磷醋?仔細(xì)想想,當(dāng)然有:邓线!

UIWebView

用WebView

UIWebView有這么一個(gè)方法:

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
  • data就是要加載的二進(jìn)制數(shù)據(jù)(NSData),我們要加載gif圖煌恢,就需要先把圖片轉(zhuǎn)換成NSData類型
  • MIME(Multipurpose Internet Mail Extensions)[1]多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型骇陈。在MIME 參考手冊中我們可以查到,我們需要的類型是image/gif
  • 編碼格式 UTF-8
  • Url這里就不需要了

那么借助UIWebView的這個(gè)方法就可以加載gif格式的圖片了瑰抵,基本思路就是:
創(chuàng)建一個(gè)類(GifImageView)繼承自UIView你雌,在GifImageView中創(chuàng)建一個(gè)UIWebView加載gif圖,這樣一來二汛,加載gif就像加載一個(gè)UIView那么easy了

代碼

  • GifImageView.h

      #import <UIKit/UIKit.h> 
      @interface GifImageView : UIView
      - (id)initWithFrame:(CGRect)frame GifImageName:(NSString*)gitImageName;
      @end
    
  • GifImageView.m

      #import "GifImageView.h"
      @implementation GifImageView
      - (id)initWithFrame:(CGRect)frame GifImageName:(NSString*)gitImageName{
          self = [super initWithFrame:frame];
          if (self) {
              self.backgroundColor = [UIColor clearColor];
              UIView *placeholdView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 1, 1)];
              [self addSubview:placeholdView];
              NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:gitImageName ofType:@"gif"]];
              UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
              [webView setScalesPageToFit: YES];
              [webView setBackgroundColor: [UIColor clearColor]];
              [webView setOpaque: 0];
              [self addSubview:webView];
              [webView loadData:gifData MIMEType:@"image/gif" textEncodingName:@"" baseURL:[NSURL URLWithString:@""]];
              [webView setUserInteractionEnabled:NO];
          }
          return self;
      }
    
  • 使用

      ...
      #import "GifImageView.h"
      ...
      
          GifImageView *gifView = [[GifImageView alloc] initWithFrame:CGRectMake(50, 270, 175, 105) GifImageName:@"gifImage"];
          [self.view addSubview:gifView];
      ...
    
  • 代碼語義明確我就不再寫注釋了

    比較關(guān)鍵的是關(guān)閉了webView的交互婿崭,防止觸發(fā)滾動,長按等事件肴颊,但這不影響其父視圖的交互

  • 移除
    它就是一個(gè)View氓栈,如果你想移除它,就用你的洪荒之力吧

寫在最后

使用這個(gè)方案我自己有一個(gè)顧慮婿着,就是用的多了會不會有一些問題授瘦,比如性能問題

有g(shù)if圖醋界,能給一個(gè)App添彩不少,但是我到目前為止還沒有發(fā)現(xiàn)哪一個(gè)App中有大量的gif圖展示的提完,一般項(xiàng)目中不會有大量的gif圖存在(一些主要目的就是展示gif圖的App除外)形纺,我自己的項(xiàng)目中也只是個(gè)別地方用到,所以不能確定對大量使用這種方案會出現(xiàn)哪些問題氯葬。挡篓。。

當(dāng)然帚称,這肯定不是唯一的方案官研,也不一定是最好的方案
如果你覺得這個(gè)方案有不妥的地方,歡迎留言指正
如果你有更好的方案闯睹,也歡迎留言共同學(xué)習(xí)


  1. 它是設(shè)定某種擴(kuò)展名的文件用一種應(yīng)用程序來打開的方式類型戏羽,當(dāng)該擴(kuò)展名文件被訪問的時(shí)候,瀏覽器會自動使用指定應(yīng)用程序來打開 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楼吃,一起剝皮案震驚了整個(gè)濱河市始花,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孩锡,老刑警劉巖酷宵,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異躬窜,居然都是意外死亡浇垦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門荣挨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來男韧,“玉大人,你說我怎么就攤上這事默垄〈寺牵” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵口锭,是天一觀的道長朦前。 經(jīng)常有香客問我,道長鹃操,這世上最難降的妖魔是什么况既? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮组民,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悲靴。我一直安慰自己臭胜,他們只是感情好莫其,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耸三,像睡著了一般乱陡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仪壮,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天憨颠,我揣著相機(jī)與錄音,去河邊找鬼积锅。 笑死爽彤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缚陷。 我是一名探鬼主播适篙,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼箫爷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虎锚,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤硫痰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后窜护,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柄慰,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藏研,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年蠢挡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凳忙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片业踏。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涧卵,靈堂內(nèi)的尸體忽然破棺而出勤家,到底是詐尸還是另有隱情,我是刑警寧澤柳恐,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布伐脖,位于F島的核電站热幔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讼庇。R本人自食惡果不足惜绎巨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蠕啄。 院中可真熱鬧场勤,春花似錦、人聲如沸歼跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘹承。三九已至窗价,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叹卷,已是汗流浹背撼港。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骤竹,地道東北人帝牡。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蒙揣,于是被迫代替她去往敵國和親靶溜。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • 昨天無意中看到一個(gè)帖子懒震,寫如何加載gif圖的罩息,感覺好麻煩的樣子,本來很簡單的一件事个扰,為什么搞的這么復(fù)雜呢瓷炮? 的確,...
    Leo_5cdb閱讀 3,081評論 0 0
  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會牽扯到網(wǎng)絡(luò)開發(fā)递宅,例如說新浪微博娘香、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 3,657評論 2 7
  • IOS之UIWebView的使用 剛接觸IOS開發(fā)1年多办龄,現(xiàn)在對于 混合式 移動端開發(fā)越來越流行烘绽,因?yàn)殚_發(fā)成本上、...
    學(xué)無止境666閱讀 45,786評論 5 53
  • OS之UIWebView的使用 剛接觸IOS開發(fā)1年多俐填,現(xiàn)在對于 混合式 移動端開發(fā)越來越流行安接,因?yàn)殚_發(fā)成本上、速...
    知之未道閱讀 1,656評論 0 4
  • 1.系統(tǒng)UIImageView 多張圖片組成動畫 /** * UIImageView 動畫 * Memor...
    zhengelababy閱讀 8,788評論 3 6