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