iOS显示gif图片的几种方法
方法一、传统方式
//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图片的几种方法相关推荐
- html文字图片同一行,CSS控制图片和文字在同一行显示且对齐的3种方法
CSS控制图片和文字在同一行显示且对齐的3种方法 在 HTML 代码中,有时会需要在文字旁边加上一个图标. 默认情况,是图片置顶对齐,文字置底对齐,所以通常图片高,文字低,不能水平居中对齐. 常见欢思 ...
- python 学习系列(3) 读取并显示图片的两种方法
python 读取并显示图片的两种方法 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 mat ...
- java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解
本文实例讲述了java Swing实现窗体添加背景图片的2种方法.分享给大家供大家参考,具体如下: 在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍. 1. ...
- 前端下载图片的N种方法
前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法. 先起个服务 使用expressjs起个简单 ...
- Qt之QWidget设置窗口背景图片的几种方法
Qt之QWidget设置窗口背景图片的几种方法 几种方法如下: 1.使用调色板QPalette来设置图片 QPalette pal =this->palette(); pal.setBrush( ...
- html页面转换成图片的三种方法——canvas、dom-to-image、html2canvas
html页面转换成图片的三种方法--canvas.dom-to-image.html2canvas canvas绘制网络图片报错(跨域) 使用canvas将html页面转成图片 dom-to-imag ...
- qt设置顶层窗口_QWidget设置窗口背景图片的几种方法
软件的界面为了更直观或美观,常常需要通过图片来表达.我们知道Qt中所有界面类的祖先是QWidget,因此学会给QWidget设置图片是必须掌握的技能之一.但是编程是没有标准答案的,达到同一效果可以有许 ...
- 测试Python下载图片的三种方法
简 介: 通过Python软件包对网络URL图片链接进行下载,可以加快后期处理.本文测试了urllib, request两个软件包对图片进行下载效果.如果图片原网页有了防止下载机制,是无法下载图片. ...
- mac 如何查看anaconda的路径_Mac OS如何直接查看gif图片?分享MAC直接查看gif图片的三种方法...
想必许多刚入手Mac的用户在浏览GIF图片文件时,会发现Mac不能直接打开GIF,因此有的用户为了方便查看还特意去下载了GIF的图片查看器,其实在Mac中有多种能够直接打开GIF的方法,用户无需任何第 ...
最新文章
- 认真对待学习(2月反思)
- 【MPI程序】向量乘法,向量点积(高性能计算)
- 英特尔® OpenVINO™中级认证正式开启!
- 国家开放大学2021春1127实用卫生统计学题目
- 信道容量受哪三个要素_影响信道容量的主要因素有哪些
- 3千字带你搞懂XXL-JOB任务调度平台
- 分享一种固定页教在页面底部的方法
- java读取linux配置文件_Java读取配置文件的几种方法
- 三个元素的矩阵乘除法
- linux 查看内网IP和外网IP
- freeswitch通过 sip网关联系外部世界
- 读书寄语:这一年,谢谢自己
- 基于高通量测序开发甘蓝型油菜全基因组SSR标记
- linux条件变量cond,Linux C 条件变量cond的使用记录
- 关于Hexo写博客时的图片插入问题(OSS对象存储+PicGo搭建图床)
- 刚闪电入门了树莓派:斩获不止Python,Linux,goLang,还有架构,格局...
- 技术学习:Python(21)|爬虫篇|selenium自动化操作浏览器
- JavaSE进阶26 - IO流概述、字节流、字符流、转换流、缓冲流
- php判断是否是微信浏览器,php判断是否为微信浏览器浏览简单示例
- including用法
热门文章
- Ajax 完整教程 (转)
- Xt800、DEFY自带号码归属地更新包,更新至2013.4【数据总数278360条】
- DotNET(C#) Socket基本编程 (1)
- MATLAB【八】———— matlab 读取单个(多个)文件夹中所有图像
- python数据结构与算法:单向链表
- 用.net中的socket实现文件传输
- DataGrid连接Access的快速分页法(1)——需求与现状
- asp.net实现C#代码加亮显示
- 实例解说.Net构架下的加密编程
- 使用valgrind分析C程序调用线路图