iOS中加載Gif圖的正確姿勢(shì)

昨天無(wú)意中看到一個(gè)帖子,寫(xiě)如何加載gif圖的,感覺(jué)好麻煩的樣子,本來(lái)很簡(jiǎn)單的一件事,為什么搞的這么復(fù)雜呢? ~~~

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

But

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

其實(shí),仔細(xì)想想,除了UIImageView可以加載圖片之外,就沒(méi)有別的系統(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 參考手冊(cè)中我們可以查到,我們需要的類型是image/gif
  • 編碼格式 UTF-8
  • Url這里就不需要了

那么借助UIWebView的這個(gè)方法就可以加載gif格式的圖片了,基本思路就是:
創(chuàng)建一個(gè)類(GifImageView)繼承自UIView,在GifImageView中創(chuàng)建一個(gè)UIWebView加載gif圖,這樣一來(lái),加載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];
      ...
    
  • 代碼語(yǔ)義明確我就不再寫(xiě)注釋了

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

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

寫(xiě)在最后

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

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

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


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

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 昨天無(wú)意中看到一個(gè)帖子,寫(xiě)如何加載gif圖的,感覺(jué)好麻煩的樣子,本來(lái)很簡(jiǎn)單的一件事,為什么搞的這么復(fù)雜呢? 的確,...
    Leo_5cdb閱讀 3,181評(píng)論 0 0
  • iOS開(kāi)發(fā)系列--網(wǎng)絡(luò)開(kāi)發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開(kāi)發(fā),例如說(shuō)新浪微博、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 4,022評(píng)論 2 7
  • IOS之UIWebView的使用 剛接觸IOS開(kāi)發(fā)1年多,現(xiàn)在對(duì)于 混合式 移動(dòng)端開(kāi)發(fā)越來(lái)越流行,因?yàn)殚_(kāi)發(fā)成本上、...
    學(xué)無(wú)止境666閱讀 46,002評(píng)論 5 53
  • OS之UIWebView的使用 剛接觸IOS開(kāi)發(fā)1年多,現(xiàn)在對(duì)于 混合式 移動(dòng)端開(kāi)發(fā)越來(lái)越流行,因?yàn)殚_(kāi)發(fā)成本上、速...
    知之未道閱讀 1,710評(píng)論 0 4
  • 1.系統(tǒng)UIImageView 多張圖片組成動(dòng)畫(huà) /** * UIImageView 動(dòng)畫(huà) * Memor...
    zhengelababy閱讀 9,273評(píng)論 3 6

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