iOS GIF 格式动画 图片显示
在 iOS 开发中,我们常使用 SDK 中的 UIImageView 显示图片,使用 UIImage 解码图片文件或数据,其支持 PNG, JEPG, BMP, GIF 等格式。其中 GIF 图片不支持动画。
如果中 iOS 中显示 GIF 动画图片,则需要自己实现。具体实现方式很简单,使用 SDK 中的 Image I/O framework 解码图片,读取 GIF 动画图片的帧数,显示时间。
然后使用 SDK 中的 quartzcore framework 中的 core animation 的 CAKeyFrameAnimation 类对 CALayer 执行动画。
1. 解码图片,在 iOS Create an CGImageSource 文章已经介绍了如何使用 Image I/O framework 进行图片解码。
2. 读取 GIF 动画图片的每一帧图片及显示时间,并保存成数组:
size_t imageCount = CGImageSourceGetCount(cImageSource);NSMutableArray *images = [[NSMutableArray alloc] initWithCapacity:imageCount];NSMutableArray *times = [[NSMutableArray alloc] initWithCapacity:imageCount];NSMutableArray *keyTimes = [[NSMutableArray alloc] initWithCapacity:imageCount];float totalTime = 0;for (size_t i = 0; i < imageCount; i++) {CGImageRef cgimage= CGImageSourceCreateImageAtIndex(cImageSource, i, NULL);[images addObject:(__bridge id)cgimage];CGImageRelease(cgimage);NSDictionary *properties = (__bridge NSDictionary *)CGImageSourceCopyPropertiesAtIndex(cImageSource, i, NULL);NSDictionary *gifProperties = [properties valueForKey:(__bridge NSString *)kCGImagePropertyGIFDictionary];NSString *gifDelayTime = [gifProperties valueForKey:(__bridge NSString* )kCGImagePropertyGIFDelayTime];[times addObject:gifDelayTime];totalTime += [gifDelayTime floatValue];_size.width = [[properties valueForKey:(NSString*)kCGImagePropertyPixelWidth] floatValue];_size.height = [[properties valueForKey:(NSString*)kCGImagePropertyPixelHeight] floatValue];}float currentTime = 0;for (size_t i = 0; i < times.count; i++) {float keyTime = currentTime / totalTime;[keyTimes addObject:[NSNumber numberWithFloat:keyTime]];currentTime += [[times objectAtIndex:i] floatValue];}
3. 执行 CAKeyFrameAnimation 动画
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];[animation setValues:images];[animation setKeyTimes:keyTimes];animation.duration = totalTime;animation.repeatCount = HUGE_VALF;[self.layer addAnimation:animation forKey:@"gifAnimation"];
完成!
iOS GIF 格式动画 图片显示相关推荐
- webp 格式的图片显示异常
webp介绍 WebP,谷歌(google)开发的一种旨在加快图片加载速度的图片格式.提供了有损压缩与无损压缩(可逆压缩)的图片文件格式,能节省大量的服务器带宽资源和数据空间. webp转换 右键点击 ...
- c android显示gif动画,MFC显示GIF动画图片
本帖则将讨论如何在MFC的对话框里显示GIF动画图片.一些关于传统控件的美化方法正在研究当中会陆续发帖的. 这是本帖用到的一个VS2008例程. 附件 GifPicture.rar (138.1 K ...
- 关于IOS中uni.downloadFile下载的图片显示不出来的解决方法
1.如果你遇到的下载后的返回路径是如下情况的 2.此时IOS有可能会出现图片显示不出来(我自己手机测试是显示不出来) 3.针对此情况,我们可以在IOS端下进行单独处理,使用escape escape( ...
- c语言头文件格式图片_阿波罗 STM32F767 开发板资料连载第四十九章 图片显示实验...
1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第四十九章 图片显示实验 ...
- 【正点原子STM32连载】第四十八章 图片显示实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 解决 .webp 格式图片在 ios 设备上无法正常显示的问题
解决.webp 格式图片在 ios 设备上无法正常显示的问题 使用字符串的 replace() 方法,将 webp 的后缀名替换为 jpg 的后缀名 // 定义请求商品详情数据的方法 async ge ...
- 疯狂ios讲义疯狂连载之显示动画
UIImage专门用于显示各种位图该类支持表12.1所示的各种图片格式. 当系统内存紧张时UIImage会将图片数据从UIImage对象中清理出去来以节省系统内存这里的清理行为只是清理UIImage内 ...
- 【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )
文章目录 一. 代码生成控件 1. 创建设置项目 ( 1 ) 创建项目 ( ① 选择 Create a new Xcode project | ② 创建 Single View Application ...
- APNG面向移动与未来的新动画图片格式揭秘与制作全技巧
动画应用的五个阶段 第一阶段:上古阶段 第二阶段:轻应用阶段 第三阶段:脚本动画时代 第四阶段:富媒体精细呈现阶段 矢量脚本动画的集大成者-Bodymovin和Lottie APNG方案 什么是apn ...
最新文章
- Cisco实物图片库2
- 为什么文件会自动恢复成旧文件? -- windows server 2003
- centos图形界面的开启和关闭
- 【AI视野·今日Robot 机器人论文速览 第十一期】Mon, 21 Jun 2021
- android微信条码支付接口,Android中调用微信支付接口
- 解决安装CMake报错:Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly.
- c#和python同一主机直接udp_Python 第十一章:面向对象编程(上)!(系列发布)...
- 【SICP练习】71 练习2.42
- android 出现在默认应用程序,如何将我的应用程序设置为默认的SMS应用程序?
- MyEclipse查看.class文件
- 使用 classList API
- Hibernate(六):映射一对多关联关系、双向一对多映射
- Android全局变量使用
- maven-maven使用-P参数打包不同环境
- go1.15版本 mod 报An existing connection was forcibly closed by the remote host错误处理
- python遍历文件夹以及排序问题
- 产品读书《魔鬼经济学3:用反常思维解决问题》
- Conflux 联合创始人、CTO伍鸣博士出席杭州钱江世纪城重点发展企业座谈会
- linux 命令 curl 详解
- jQuery获得当前元素id