这篇文章给大家分享的是有关IOS中如何实现播放gif动态图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
创新互联公司为客户提供专业的做网站、成都做网站、程序、域名、空间一条龙服务,提供基于WEB的系统开发. 服务项目涵盖了网页设计、网站程序开发、WEB系统开发、微信二次开发、移动网站建设等网站方面业务。
一、引言
在iOS开发中,UIImageView类专门来负责图片数据的渲染,并且UIImageView也有帧动画的方法来播放一组图片,但是对于gif类型的数据,UIImageView中并没有现成的接口提供给开发者使用,在iOS中一般可以通过两种方式来播放gif动态图,一种方式是通过ImageIO框架中的方法将gif文件中的数据进行解析,再使用coreAnimation核心动画来播放gif动画,另一种方式计较简单,可以直接通过webView来渲染gif图。
二、为原生的UIImageView添加类别来支持gif动态图的播放
gif动态图文件中包含了一组图片及其信息,信息主要记录着每一帧图片播放的时间,我们如果获取到了gif文件中所有的图片同时又获取到每一帧图片播放的时间,就可以为UIImageView添加核心动画的方法来让其播放gif的内容了。
首先解析gif文件中的数据,代码如下:
//要引入ImageIO库 #import//解析gif文件数据的方法 block中会将解析的数据传递出来 -(void)getGifImageWithUrk:(NSURL *)url returnData:(void(^)(NSArray * imageArray, NSArray *timeArray, CGFloat totalTime, NSArray * widths, NSArray * 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 为UIImageView添加一个设置gif图内容的方法:
-(void)yh_setImage:(NSURL *)imageUrl{ __weak id __self = self; [self getGifImageWithUrk:imageUrl returnData:^(NSArray*imageArray, NSArray *timeArray, CGFloat totalTime, NSArray *widths, NSArray *heights) { //添加帧动画 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"]; NSMutableArray * times = [[NSMutableArray alloc]init]; float currentTime = 0; //设置每一帧的时间占比 for (int i=0; i 使用代码示例如下:
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能够更加自由的让开发者进行扩展。
感谢各位的阅读!关于“IOS中如何实现播放gif动态图”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
网站名称:IOS中如何实现播放gif动态图
文章来源:http://www.cdkjz.cn/article/pjdhep.html