亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

淺析IOS中播放gif動態圖的方法

2020-07-26 02:53:38
字體:
來源:轉載
供稿:網友

一、引言

    在iOS開發中,UIImageView類專門來負責圖片數據的渲染,并且UIImageView也有幀動畫的方法來播放一組圖片,但是對于gif類型的數據,UIImageView中并沒有現成的接口提供給開發者使用,在iOS中一般可以通過兩種方式來播放gif動態圖,一種方式是通過ImageIO框架中的方法將gif文件中的數據進行解析,再使用coreAnimation核心動畫來播放gif動畫,另一種方式計較簡單,可以直接通過webView來渲染gif圖。

二、為原生的UIImageView添加類別來支持gif動態圖的播放

     gif動態圖文件中包含了一組圖片及其信息,信息主要記錄著每一幀圖片播放的時間,我們如果獲取到了gif文件中所有的圖片同時又獲取到每一幀圖片播放的時間,就可以為UIImageView添加核心動畫的方法來讓其播放gif的內容了。

    首先解析gif文件中的數據,代碼如下:

//要引入ImageIO庫#import <ImageIO/ImageIO.h>//解析gif文件數據的方法 block中會將解析的數據傳遞出來-(void)getGifImageWithUrk:(NSURL *)url    returnData:(void(^)(NSArray<UIImage *> * imageArray,        NSArray<NSNumber *>*timeArray,        CGFloat totalTime,        NSArray<NSNumber *>* widths,        NSArray<NSNumber *>* heights))dataBlock{ //通過文件的url來將gif文件讀取為圖片數據引用 CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL); //獲取gif文件中圖片的個數 size_t count = CGImageSourceGetCount(source); //定義一個變量記錄gif播放一輪的時間 float allTime=0; //存放所有圖片 NSMutableArray * imageArray = [[NSMutableArray alloc]init]; //存放每一幀播放的時間 NSMutableArray * timeArray = [[NSMutableArray alloc]init]; //存放每張圖片的寬度 (一般在一個gif文件中,所有圖片尺寸都會一樣) NSMutableArray * widthArray = [[NSMutableArray alloc]init]; //存放每張圖片的高度 NSMutableArray * heightArray = [[NSMutableArray alloc]init]; //遍歷 for (size_t i=0; i<count; i++) {  CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);  [imageArray addObject:(__bridge UIImage *)(image)];  CGImageRelease(image);  //獲取圖片信息  NSDictionary * info = (__bridge NSDictionary*)CGImageSourceCopyPropertiesAtIndex(source, i, NULL);  CGFloat width = [[info objectForKey:(__bridge NSString *)kCGImagePropertyPixelWidth] floatValue];  CGFloat height = [[info objectForKey:(__bridge NSString *)kCGImagePropertyPixelHeight] floatValue];  [widthArray addObject:[NSNumber numberWithFloat:width]];  [heightArray addObject:[NSNumber numberWithFloat:height]];  NSDictionary * timeDic = [info objectForKey:(__bridge NSString *)kCGImagePropertyGIFDictionary];  CGFloat time = [[timeDic objectForKey:(__bridge NSString *)kCGImagePropertyGIFDelayTime]floatValue];  allTime+=time;  [timeArray addObject:[NSNumber numberWithFloat:time]];  CFRelease(info); } CFRelease(source); dataBlock(imageArray,timeArray,allTime,widthArray,heightArray);}

為UIImageView添加一個設置gif圖內容的方法:

-(void)yh_setImage:(NSURL *)imageUrl{  __weak id __self = self;  [self getGifImageWithUrk:imageUrl returnData:^(NSArray<UIImage *> *imageArray, NSArray<NSNumber *> *timeArray, CGFloat totalTime, NSArray<NSNumber *> *widths, NSArray<NSNumber *> *heights) {   //添加幀動畫   CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];   NSMutableArray * times = [[NSMutableArray alloc]init];   float currentTime = 0;   //設置每一幀的時間占比   for (int i=0; i<imageArray.count; i++) {    [times addObject:[NSNumber numberWithFloat:currentTime/totalTime]];    currentTime+=[timeArray[i] floatValue];   }   [animation setKeyTimes:times];   [animation setValues:imageArray];   [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];   //設置循環   animation.repeatCount= MAXFLOAT;   //設置播放總時長   animation.duration = totalTime;   //Layer層添加   [[(UIImageView *)__self layer]addAnimation:animation forKey:@"gifAnimation"];  }];}

使用代碼示例如下:

 UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0 , 320, 200)]; NSURL * url = [[NSURL alloc]initFileURLWithPath:[[NSBundle mainBundle] pathForResource:imageName ofType:nil]]; [imageView yh_setImage:url]; [self.view addSubview:imageView];

三、使用UIWebView來加載gif動態圖數據

    iOS中的UIWebView功能十分強大,可以通過UIWebView為載體,來展示gif圖。并且這種方法也十分簡單,代碼如下:

 //讀取gif數據   NSData *gifData = [NSData dataWithContentsOfURL:imageUrl];  UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];  //取消回彈效果  webView.scrollView.bounces=NO;  webView.backgroundColor = [UIColor clearColor];  //設置縮放模式  webView.scalesPageToFit = YES;  //用webView加載數據  [webView loadData:gifData MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];

四、兩種加載gif動態圖方式的優劣

    經過測試,從加載速度上來說,通過UIImageView類別加載的方式更加快速,UIWebView的方式加載時間會稍長,但是從性能上來比較,WebView的方式性能更優,播放的gif動態圖更加流暢。在開發中,可以根據需求,適當選擇,例如雖然WebView加載的方式性能更好,但是在許多情況下,原生的UIImageView能夠更加自由的讓開發者進行擴展。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97色伦亚洲国产| 国产成人鲁鲁免费视频a| 久久99精品久久久久久噜噜| 992tv成人免费影院| 91精品国产综合久久香蕉最新版| 在线视频欧美日韩| 亚洲人成电影在线播放| 国产精品一区av| 国产精品久久久久久久久久ktv| 久久精品亚洲一区| 国产香蕉97碰碰久久人人| 成人国产亚洲精品a区天堂华泰| 亚洲国产日韩精品在线| 曰本色欧美视频在线| 久久久久久久久爱| 美日韩丰满少妇在线观看| 欧美亚州一区二区三区| 亚洲一区二区黄| 日本一区二区在线播放| 日韩中文字幕免费| 性色av一区二区三区红粉影视| 中文在线不卡视频| 欧美亚洲国产日韩2020| 亚洲欧美中文日韩在线| 国产精品www网站| 亚洲欧美一区二区三区情侣bbw| 菠萝蜜影院一区二区免费| 日本电影亚洲天堂| 在线观看视频亚洲| 欧美大秀在线观看| 亚洲资源在线看| 久久久视频免费观看| 亚洲国产成人精品久久| 久久综合伊人77777尤物| 97视频在线观看成人| 成人久久一区二区| 日韩电影免费在线观看| 91免费欧美精品| 这里只有精品久久| 亚洲精品免费网站| 亚洲偷熟乱区亚洲香蕉av| xx视频.9999.com| 国产+成+人+亚洲欧洲| 亚洲日韩中文字幕在线播放| 欧美一级视频免费在线观看| 亚洲天堂av女优| 亚洲高清一区二| 欧美丰满少妇xxxxx做受| 欧美日韩美女在线观看| 欧美电影在线免费观看网站| 91中文字幕在线| 91超碰中文字幕久久精品| 欧美特级www| 国产欧美日韩中文字幕| 欧美在线观看视频| 日韩成人黄色av| 91热精品视频| 日韩欧美在线视频免费观看| 欧美日韩电影在线观看| 久久久伊人欧美| 日本久久久久久久久| 亚洲欧美日韩久久久久久| 亚洲激情视频在线| 亚洲欧美日韩一区在线| 国外日韩电影在线观看| 亚洲桃花岛网站| 欧美刺激性大交免费视频| 欧美日韩国产在线看| 亚洲自拍偷拍网址| 亚洲激情成人网| 55夜色66夜色国产精品视频| 国产成一区二区| 欧美性xxxxx| 欧美日韩亚洲一区二区| 日韩激情av在线播放| 亚洲午夜色婷婷在线| 欧美野外wwwxxx| 亚洲国产精品va| 亚洲久久久久久久久久久| 日韩精品中文字| 国产一区二区在线免费视频| 欧美激情在线一区| 亚洲精品美女在线观看| 精品国产一区二区三区久久狼5月| 久久精品久久久久| 欧美日韩一区二区免费在线观看| 91国产精品91| 亚洲高清在线观看| 国产精品视频自拍| 久操成人在线视频| 日韩成人av在线播放| 色狠狠久久aa北条麻妃| 亚洲第一中文字幕在线观看| 日本韩国在线不卡| 久久深夜福利免费观看| 亚洲在线观看视频网站| 国产在线观看精品| 中文字幕精品一区二区精品| 亚洲精品网站在线播放gif| 国产精品亚洲美女av网站| 日韩av在线免费播放| 国产精品偷伦视频免费观看国产| 亚洲一区二区三区在线免费观看| 欧美成人免费全部观看天天性色| 亚洲精品自产拍| 77777亚洲午夜久久多人| 亚洲影视九九影院在线观看| 国产裸体写真av一区二区| 亚洲三级黄色在线观看| 伊人久久久久久久久久久久久| 中文字幕精品视频| 日韩国产激情在线| 中文字幕日韩在线播放| 国产精品永久免费| 中文字幕日韩av| 亚洲网站在线播放| 国产视频久久久久久久| 欧美国产亚洲视频| 国产一区二区三区精品久久久| 欧美亚洲国产另类| 国产精品亚洲аv天堂网| 欧美综合第一页| 成人免费网站在线观看| 国产免费一区二区三区香蕉精| 92裸体在线视频网站| 91色精品视频在线| 日韩精品999| 久久精品男人天堂| 亚洲精品久久久久久久久久久| 国产精品一区二区三| 国产99久久久欧美黑人| 精品国产91乱高清在线观看| 日韩精品在线视频观看| 国产精品三级久久久久久电影| 亚洲色图狂野欧美| 日本最新高清不卡中文字幕| 国产精品黄色影片导航在线观看| 国产激情久久久| 日韩中文字幕在线观看| 久久久久这里只有精品| 国产精品永久免费在线| 久久影视电视剧凤归四时歌| 中文字幕精品一区久久久久| 日本中文字幕成人| 超碰日本道色综合久久综合| 55夜色66夜色国产精品视频| 九九热精品视频国产| 国产亚洲人成a一在线v站| 国产日产亚洲精品| 欧美日韩成人网| 欧美一级电影免费在线观看| 久久久免费观看视频| 精品视频—区二区三区免费| 4438全国亚洲精品在线观看视频| 国产精品一区二区三区久久| 日韩网站在线观看| 成人国产精品日本在线| 日韩电影在线观看中文字幕| 亚洲四色影视在线观看| 欧美午夜无遮挡| 国产精品高潮呻吟视频| 国产日韩亚洲欧美| 久久亚洲影音av资源网| 欧美国产精品日韩|