iOS 播放gif图片
引言:我们在用SDWebImage的时候, 如果图片是.gif
的时候,是自动无限循环播放的,而如果我们只需要播放有限次数gif
图的时候,是没有办法的,接下来让我们看看不用第三方如何播放gif
图吧。
Demo下载
首先,UIImageView是存在播放一组图片的功能的,而.gif
的图片,也是一组图片组成的, 我们需要把gif
图分解成一组图片;
第二步,拿到一组图片之后,我们还需要知道gif
图片需要播放多久,就需要拿到时间信息;
第三步,当我们停止播放的时候,要显示哪一张图片,也需要给定的,不然停止播放的时候就会显示空白;
补充说明: gif
图暂停的时候,是固定显示一张图片的。如果想做实时暂停,则本篇微博不会涉及。不过操作思路还是可以讲一下,就是拿到图片组;然后再拿到每张图片播放的时间,开一个定时器;然后根据时间的流逝显示图片,当点击暂停的时候定时器暂停,点击继续的时候定时器继续走,而不是用UIImageView提供的系统方法。定时器的话可以用CADisplayLink
,比较精确,是根据屏幕刷新率来的,不过不了解可以自行搜索,也是不难的。虽然不提供此功能,但是,下面一部分的代码对你也是有一定的帮助的,看看就知道了,代码量也不是很大。(如果我哪天有闲暇时间,可能会写一个,到时候会发上链接的)
代码:
// 1.获取NSData类型
guard let filePath = Bundle.main.path(forResource: "demo.gif", ofType: nil) else { return }
guard let fileData = NSData(contentsOfFile: filePath) else { return }// 2.根据Data获取CGImageSource对象
guard let imageSource = CGImageSourceCreateWithData(fileData, nil) else { return }// 3.获取gif图片中图片的个数
let frameCount = CGImageSourceGetCount(imageSource)
// 记录播放时间
var duration : TimeInterval = 0
var images = [UIImage]()
for i in 0..<frameCount {// 3.1.获取图片guard let cgImage = CGImageSourceCreateImageAtIndex(imageSource, i, nil) else { continue }// 3.2.获取时长guard let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, i, nil) , let gifInfo = (properties as NSDictionary)[kCGImagePropertyGIFDictionary as String] as? NSDictionary,let frameDuration = (gifInfo[kCGImagePropertyGIFDelayTime as String] as? NSNumber) else { continue }duration += frameDuration.doubleValuelet image = UIImage(cgImage: cgImage)images.append(image)// 设置停止播放时现实的图片if i == frameCount - 1 {imageView.image = image}
}
// 4.播放图片
imageView.animationImages = images
// 播放总时间
imageView.animationDuration = duration
// 播放次数, 0为无限循环
imageView.animationRepeatCount = 1
// 开始播放
imageView.startAnimating()
// 停止播放
// imageView.stopAnimating()
结束语:
以上代码是Swift
的,不过需要用OC,可以自己翻译成OC,代码量也不大。如果一个iOS开发者读不懂这点Swift的代码的话,你的知识储备该提高了,赶紧去学啊少年!
如果懒得翻译,也可以用OC混编Swift,封装一下,照样用。最后再次附上下载地址(戳这里下载Demo啊)
如果对你有帮助,点个Star呗
同时也欢迎评论中指出本文存在的bug,或者疑问,互相促进!
作者邮箱:pangshishan@aliyun.com, pangshishan1@163.com
github地址:https://github.com/Pangshishan
qq/微信: 704158807
iOS 播放gif图片相关推荐
- iOS 播放.GIF图片
- (void)downloadImages:(int)index { //下载图片 NSBlockOperation *download = [NSBlockOperation blockOpera ...
- iOS 播放gif动态图的方式探讨
原文链接:http://my.oschina.net/u/2340880/blog/608560 摘要 iOS中没有现成的接口来展示gif动态图,但可以通过其他的方式来处理gif图的展示. iOS中播 ...
- ios播放视频demo
今天要用到ios原生态播放一段网络视频,在此整理共享出来 白白手游专栏http://blog.csdn.net/u010229677 首先需要给工程添加框架MediaPlayer.Framework ...
- ios关于GPUImage图片拍摄及视频录制
@ios关于GPUImage图片拍摄及视频录制 GPUImage图片拍摄及视频录制.给以后视频添加滤镜 基本属性 GPUImageVideoCamera 视频拍摄: GPUImageStillCame ...
- android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...
Android自动播放Banner图片轮播效果 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id="@+id/banner" andro ...
- Unity3d(U3D) Windows/Android/IOS 播放rtmp/rtsp方案
如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器. 集成Navtive播放器可行性分析: 安卓: Unity3d可 ...
- 非常优秀的swiper插件————幻灯片播放、图片轮播
非常优秀的swiper插件----幻灯片播放.图片轮播 http://www.idangero.us/ http://www.swiper.com.cn/ Swiper中文网 2015-10-15 S ...
- Java ffmpeg视频压缩IOS播放没有声音问题解决(超级简单)
排查问题:ffmpeg视频压缩IOS播放没有声音问题 解决方法:将音频格式设置为:aac:将视频格式设置为h264: 查询了好多文章,总结如下,废话少说,直接上代码: public static vo ...
- WPF中播放GIF图片
WPF中播放GIF图片 文章目录 WPF中播放GIF图片 1.安装WpfAnimatedGif Nuget包 2.程序中使用 3.源代码 4. WpfAnimatedGif GitHub源代码 1.安 ...
最新文章
- 建议你吃透这68个内置函数!
- 为什么要自学python_为什么那么多自学Python的后来都放弃了,总结起来就这些原因...
- 性能测试学习05_lr(根据接口文档写脚本+参数化)
- Go 语言设计与实现纸质书出版,为信仰补票
- AI(5)---AI知多少
- linux 的FAQ
- linux 读取 ntfs硬盘,嵌入式linux下ntfs格式的硬盘读写方法
- ASP.NET MVC+LINQ开发一个图书销售站点
- ipython快捷键
- Redis牛逼!轻松实现实时订阅推送
- matlab 特征选择算法,特征选择、特征提取matlab算法实现(模式识别)
- 2018年版北大中文核心期刊目录(2017最新第八版)
- python书籍推荐1001python书籍推荐_Python之codebook笔记
- shell中的let命令
- leetcode 413. 等差数列划分
- 小学计算机室培训心得,小学计算机培训心得体会范文
- 语音合成——闽南语合成(1)
- 电脑装两个硬盘在计算机只显示一个,插入U盘出现两个盘符怎么解决?一个U盘显示两个盘符解决方法...
- 从0到1400star,从阮一峰周刊到尤雨溪推荐,小透明开源项目的2021年总结
- 【仿真建模】第一课:AnyLogic入门基础教程 - 行人库入门讲解