引言:我们在用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图片相关推荐

  1. iOS 播放.GIF图片

    - (void)downloadImages:(int)index { //下载图片 NSBlockOperation *download = [NSBlockOperation blockOpera ...

  2. iOS 播放gif动态图的方式探讨

    原文链接:http://my.oschina.net/u/2340880/blog/608560 摘要 iOS中没有现成的接口来展示gif动态图,但可以通过其他的方式来处理gif图的展示. iOS中播 ...

  3. ios播放视频demo

    今天要用到ios原生态播放一段网络视频,在此整理共享出来 白白手游专栏http://blog.csdn.net/u010229677 首先需要给工程添加框架MediaPlayer.Framework ...

  4. ios关于GPUImage图片拍摄及视频录制

    @ios关于GPUImage图片拍摄及视频录制 GPUImage图片拍摄及视频录制.给以后视频添加滤镜 基本属性 GPUImageVideoCamera 视频拍摄: GPUImageStillCame ...

  5. android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...

    Android自动播放Banner图片轮播效果 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id="@+id/banner" andro ...

  6. Unity3d(U3D) Windows/Android/IOS 播放rtmp/rtsp方案

    如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器. 集成Navtive播放器可行性分析: 安卓: Unity3d可 ...

  7. 非常优秀的swiper插件————幻灯片播放、图片轮播

    非常优秀的swiper插件----幻灯片播放.图片轮播 http://www.idangero.us/ http://www.swiper.com.cn/ Swiper中文网 2015-10-15 S ...

  8. Java ffmpeg视频压缩IOS播放没有声音问题解决(超级简单)

    排查问题:ffmpeg视频压缩IOS播放没有声音问题 解决方法:将音频格式设置为:aac:将视频格式设置为h264: 查询了好多文章,总结如下,废话少说,直接上代码: public static vo ...

  9. WPF中播放GIF图片

    WPF中播放GIF图片 文章目录 WPF中播放GIF图片 1.安装WpfAnimatedGif Nuget包 2.程序中使用 3.源代码 4. WpfAnimatedGif GitHub源代码 1.安 ...

最新文章

  1. 建议你吃透这68个内置函数!
  2. 为什么要自学python_为什么那么多自学Python的后来都放弃了,总结起来就这些原因...
  3. 性能测试学习05_lr(根据接口文档写脚本+参数化)
  4. Go 语言设计与实现纸质书出版,为信仰补票
  5. AI(5)---AI知多少
  6. linux 的FAQ
  7. linux 读取 ntfs硬盘,嵌入式linux下ntfs格式的硬盘读写方法
  8. ASP.NET MVC+LINQ开发一个图书销售站点
  9. ipython快捷键
  10. Redis牛逼!轻松实现实时订阅推送
  11. matlab 特征选择算法,特征选择、特征提取matlab算法实现(模式识别)
  12. 2018年版北大中文核心期刊目录(2017最新第八版)
  13. python书籍推荐1001python书籍推荐_Python之codebook笔记
  14. shell中的let命令
  15. leetcode 413. 等差数列划分
  16. 小学计算机室培训心得,小学计算机培训心得体会范文
  17. 语音合成——闽南语合成(1)
  18. 电脑装两个硬盘在计算机只显示一个,插入U盘出现两个盘符怎么解决?一个U盘显示两个盘符解决方法...
  19. 从0到1400star,从阮一峰周刊到尤雨溪推荐,小透明开源项目的2021年总结
  20. 【仿真建模】第一课:AnyLogic入门基础教程 - 行人库入门讲解

热门文章

  1. 推荐系统实战:新闻推荐系统基本流程
  2. 谭浩强-习题6.10
  3. 蓝桥 百亿富翁 stack<Type> 栈
  4. 曾仕强讲易经:元、亨、利、贞
  5. oracle连接数据库的jar包(ojdbc10.jar,ojdbc8.jar,ojdbc6.jar)
  6. 虚拟机云服务器6.0教程pdf,虚拟机云服务器6.0教程pdf
  7. JAVA重载函数求最大值
  8. Android开发笔记(序)
  9. Measurement Studio 2019 for Visual Studio 2019
  10. 第三代战斗机的特点有哪些