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