iOS 的 Gif 渲染引擎 FLAnimatedImage-b
关于gif的展示,有些项目中很少用到,所以有的人对于这方面了解不是很多
下面介绍几种展示gif的方法,希望大家可以用得上,有更好的方法欢迎评论区留言
一,展示本地的gif,使用的SDWebImage里面的方法:
+ (UIImage *)sd_animatedGIFNamed:(NSString *)name;
+ (UIImage *)sd_animatedGIFWithData:(NSData *)data;
使用之后发现这个方法会使内存迅速上增300M,在网上找了一些方法:
//在didReceiveMemoryWarning方法中释放SDImage的缓存即可!
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
[[SDWebImageManagersharedManager]cancelAll];
[[SDImageCachesharedImageCache]clearDisk];
}
但是使用之后可能效果并不明显
二,展示本地的gif,使用 FLAnimatedImage
FLAnimatedImage 是 iOS 的一个渲染 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];
--------------------
FLAnimatedImage *image = [FLAnimatedImage animatedImageWithGIFData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif"]]];
FLAnimatedImageView *imageView = [[FLAnimatedImageView alloc] init];
imageView.animatedImage = image; imageView.frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
[self.view addSubview:imageView];
三,利用很原始的方法展示固定的gif
将gif图片分解成多张png图片,使用UIImageView播放。这个是先让ui做好连续的图片,放到本地展示。
四,用webview展示
五,用传统的方法偏c一点的,来直接展示本地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;
六,加载网络gif
直接使用sdweb的setimageWithUrl: 就行
参考链接:
https://blog.csdn.net/dolacmeng/article/details/81223612
https://blog.csdn.net/dolacmeng/article/details/81223612
iOS 的 Gif 渲染引擎 FLAnimatedImage-b的更多相关文章
- Pluto - iOS 上一个高性能的排版渲染引擎
WeTest 导读 Pluto 是 iOS 上的一个排版渲染引擎,通过 JSON/JS 文件可以很方便地描述界面元素,开发效率很高,并且在流畅度,内存等方便有保证.pluto.oa.com 上有更多详 ...
- iOS 的 Gif 渲染
关于gif的展示,有些项目中很少用到,所以有的人对于这方面了解不是很多 下面介绍几种展示gif的方法,希望大家可以用得上,有更好的方法欢迎评论区留言 一,展示本地的gif,使用的SDWebImage里 ...
- Blink: Chromium的新渲染引擎
编自http://www.chromium.org/blink 关于blink Google Chrome/Chromium 从创始至今一直使用 WebKit(WebCore) 作为 HTML/CSS ...
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
- 新渲染引擎、自定义设计和高质量用户体验的样例应用 Wonderous 现已开源
探索世界奇观,并体验 Flutter 的强大之处. Flutter 的愿景是让你能够在空白画布上绘制出不受限制的精美应用.最近,通过与 gskinner 团队的通力合作,我们打造了一个全新的移动应用 ...
- 浏览器渲染引擎,提高css渲染速度。
一.渲染引擎渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上.默认情况下渲染引擎可以显示HTML,XML文档以及图片. 通过插件(浏览器扩展)它可以显示其它类型文档. 二.各种渲染引擎我 ...
- 【repost】浏览器内核、渲染引擎、js引擎
[1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...
- Outlook HTML渲染引擎
OutLook始终不离不弃 是不是很讨厌为Email代码兼容Outlook? 太遗憾了!虽然光都有尽头,但Outlook始终存在. 为了应付Email的怪癖,我们花了很多时间测试,确保我们搞定了所有O ...
- 浏览器内核、渲染引擎、js引擎
[1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具 [2]常见引擎 渲染引擎: fire ...
随机推荐
- 24小时学通Linux内核之内存管理方式
昨天分析的进程的代码让自己还在头昏目眩,脑子中这几天都是关于Linux内核的,对于自己出现的一些问题我会继续改正,希望和大家好好分享,共同进步.今天将会讲诉Linux如何追踪和管理用户空间进程的可用内 ...
- loadrunner做webservice接口之简单调用
今天听大神讲了webservice做接口,我按照他大概讲的意思自己模拟实战了下,可能还有很多不对,一般使用webservice做接口,会使用到soapui,但是用了loadrunner以后发现lr很快 ...
- linux 第一次获得root权限
开机进入桌面,ctrl+alt+T打开终端————在此时终端显示的是 用户名@电脑名:-$ 表示普通用户 在此处输入:sudo passwd root 此时提示———— [sudo] pa ...
- 使用git ftp发布我个人的hexo博客内容
自己虚拟主机中的博客是由hexo3 + next主题,因为我想将 hexo 编译生成的文件可以通过ftp命令发布到ftp服务器上面. 发布使用的工具是git-ftp: 按照Use Jenkins an ...
- Ehcache(2.9.x) - Configuration Guide, Configuring Storage Tiers
About Storage Tiers Ehcache has three storage tiers, summarized here: Memory store – Heap memory tha ...
- 关于easyui的一些小知识点(1)
让layout布局自动适应浏览器宽度只需要加上fit="true"属性.
- Android的ListView分页功能
一.功能分析----ListView“加载更多”,功能如下图所示: 这个效果是当你上拉拖动页面时(注意有区别于下拉刷新),页面提示正在加载,2秒后显示留言更多内容:具体功能知道那我就来讲解下如何实现这 ...
- 在SQL 2012中使用和Oracle 一样的序列
使用过Oracle的都知道,Oracle中的自增是靠序列来完成的,在一定程度上蛮方便的.现在SQL 2012中也有序列了.来看看怎么做的吧! SQL Server 现在将序列当成一个对象来实现,创建一 ...
- NodeJS V8 GC概览
[A tour of V8: Garbage Collection] http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection 基本是 ...
- ubuntu 12.04 clang 3.4 安装
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.添加clang源 deb http://llvm.org/apt/ ...