方法一、传统方式

//1.加载Gif图片,转换成Data类型NSString *path = [NSBundle.mainBundle pathForResource:@"demo" ofType:@"gif"];NSData *data = [NSData dataWithContentsOfFile:path];//2.将data数据转换成CGImageSource对象CGImageSourceRef imageSource = CGImageSourceCreateWithData(CFBridgingRetain(data), nil);size_t imageCount = CGImageSourceGetCount(imageSource);//3.遍历所有图片NSMutableArray *images = [NSMutableArray array];NSTimeInterval totalDuration = 0;for (int i = 0; i<imageCount; i++) {//取出每一张图片CGImageRef cgImage = CGImageSourceCreateImageAtIndex(imageSource, i, nil);UIImage *image = [UIImage imageWithCGImage:cgImage];[images addObject:image];//持续时间NSDictionary *properties = (__bridge_transfer  NSDictionary*)CGImageSourceCopyPropertiesAtIndex(imageSource, i, nil);NSDictionary *gifDict = [properties objectForKey:(__bridge NSString *)kCGImagePropertyGIFDictionary];NSNumber *frameDuration =[gifDict objectForKey:(__bridge NSString *)kCGImagePropertyGIFDelayTime];totalDuration += frameDuration.doubleValue;}//4.设置imageView属性self.imageView.animationImages = images;self.imageView.animationDuration = totalDuration;self.imageView.animationRepeatCount = 0;//5.开始播放[self.imageView startAnimating];

完整代码:https://github.com/dolacmeng/gifDemo

方法二、第三方框架FLAnimatedImage

利用FLAnimatedImage可以快速添加一个gif图片到视图,如添加名称为test_gif.gif的图片:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test_gif" ofType:@"gif"];
NSURL *url = [NSURL fileURLWithPath:filePath];
FLAnimatedImage *gest = [FLAnimatedImage animatedImageWithGIFData: [NSData dataWithContentsOfURL:url]];
FLAnimatedImageView *gestImageView = [[FLAnimatedImageView alloc] init];
gestImageView.animatedImage = gest;
gestImageView.frame = CGRectMake(461, 311, 119.5, 113);
[view addSubview:gestImageView];

方法三、利用UIWebView

如利用UIWebView加载名称为test_gif.png的图片:

UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, _imageW, _imageH)];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"test_gif" ofType:@"gif"];
NSData *imgData = [NSData dataWithContentsOfFile:imagePath];
UIImage *image = [UIImage imageWithData:imgData];
bgImageView.image = image;[self.bgScrollView addSubview:bgImageView];

优化多个Gif同时播放卡顿的问题

在我的实际开发中,有个需求是在一个页面中显示多个Gif动画,利用上面的方法,都会有卡顿不流畅的问题,经过与设计狮的沟通,提出了将gif文件转化为apng格式,再用方法三的方式用UIWebView加载就不卡顿了。

iOS显示gif图片的几种方法相关推荐

  1. html文字图片同一行,CSS控制图片和文字在同一行显示且对齐的3种方法

    CSS控制图片和文字在同一行显示且对齐的3种方法 在 HTML 代码中,有时会需要在文字旁边加上一个图标. 默认情况,是图片置顶对齐,文字置底对齐,所以通常图片高,文字低,不能水平居中对齐. 常见欢思 ...

  2. python 学习系列(3) 读取并显示图片的两种方法

    python 读取并显示图片的两种方法 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 mat ...

  3. java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解

    本文实例讲述了java Swing实现窗体添加背景图片的2种方法.分享给大家供大家参考,具体如下: 在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍. 1. ...

  4. 前端下载图片的N种方法

    前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法. 先起个服务 使用expressjs起个简单 ...

  5. Qt之QWidget设置窗口背景图片的几种方法

    Qt之QWidget设置窗口背景图片的几种方法 几种方法如下: 1.使用调色板QPalette来设置图片 QPalette pal =this->palette(); pal.setBrush( ...

  6. html页面转换成图片的三种方法——canvas、dom-to-image、html2canvas

    html页面转换成图片的三种方法--canvas.dom-to-image.html2canvas canvas绘制网络图片报错(跨域) 使用canvas将html页面转成图片 dom-to-imag ...

  7. qt设置顶层窗口_QWidget设置窗口背景图片的几种方法

    软件的界面为了更直观或美观,常常需要通过图片来表达.我们知道Qt中所有界面类的祖先是QWidget,因此学会给QWidget设置图片是必须掌握的技能之一.但是编程是没有标准答案的,达到同一效果可以有许 ...

  8. 测试Python下载图片的三种方法

    简 介: 通过Python软件包对网络URL图片链接进行下载,可以加快后期处理.本文测试了urllib, request两个软件包对图片进行下载效果.如果图片原网页有了防止下载机制,是无法下载图片. ...

  9. mac 如何查看anaconda的路径_Mac OS如何直接查看gif图片?分享MAC直接查看gif图片的三种方法...

    想必许多刚入手Mac的用户在浏览GIF图片文件时,会发现Mac不能直接打开GIF,因此有的用户为了方便查看还特意去下载了GIF的图片查看器,其实在Mac中有多种能够直接打开GIF的方法,用户无需任何第 ...

最新文章

  1. 认真对待学习(2月反思)
  2. 【MPI程序】向量乘法,向量点积(高性能计算)
  3. 英特尔® OpenVINO™中级认证正式开启!
  4. 国家开放大学2021春1127实用卫生统计学题目
  5. 信道容量受哪三个要素_影响信道容量的主要因素有哪些
  6. 3千字带你搞懂XXL-JOB任务调度平台
  7. 分享一种固定页教在页面底部的方法
  8. java读取linux配置文件_Java读取配置文件的几种方法
  9. 三个元素的矩阵乘除法
  10. linux 查看内网IP和外网IP
  11. freeswitch通过 sip网关联系外部世界
  12. 读书寄语:这一年,谢谢自己
  13. 基于高通量测序开发甘蓝型油菜全基因组SSR标记
  14. linux条件变量cond,Linux C 条件变量cond的使用记录
  15. 关于Hexo写博客时的图片插入问题(OSS对象存储+PicGo搭建图床)
  16. 刚闪电入门了树莓派:斩获不止Python,Linux,goLang,还有架构,格局...
  17. 技术学习:Python(21)|爬虫篇|selenium自动化操作浏览器
  18. JavaSE进阶26 - IO流概述、字节流、字符流、转换流、缓冲流
  19. php判断是否是微信浏览器,php判断是否为微信浏览器浏览简单示例
  20. including用法

热门文章

  1. Ajax 完整教程 (转)
  2. Xt800、DEFY自带号码归属地更新包,更新至2013.4【数据总数278360条】
  3. DotNET(C#) Socket基本编程 (1)
  4. MATLAB【八】———— matlab 读取单个(多个)文件夹中所有图像
  5. python数据结构与算法:单向链表
  6. 用.net中的socket实现文件传输
  7. DataGrid连接Access的快速分页法(1)——需求与现状
  8. asp.net实现C#代码加亮显示
  9. 实例解说.Net构架下的加密编程
  10. 使用valgrind分析C程序调用线路图