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..

结束语:

以上代码是Swift的,不过需要用OC,可以自己翻译成OC,代码量也不大。如果一个iOS开发者读不懂这点Swift的代码的话,你的知识储备该提高了,赶紧去学啊少年!
如果懒得翻译,也可以用OC混编Swift,封装一下,照样用。最后再次附上下载地址(戳这里下载Demo啊)

如果对你有帮助,点个Star呗
同时也欢迎评论中指出本文存在的bug,或者疑问,互相促进!
作者邮箱:[email protected][email protected]
github地址:https://github.com/Pangshishan
qq/微信: 704158807

你可能感兴趣的:(iOS 单次播放GIF图片)