一、场景需求
iOS系统中不支持flash,所以gif图片无法播放。需要将gif中的所有单图拿出来,自己来实现轮播动画。ImageIO框架中提供了获取gif图片中所有单图的相关API。
二、使用简介
1.首先根据gif图片文件初始化CGImageSourceRef:CFDataRef可以通过读取gif文件来获取
CGImageSourceRef CGImageSourceCreateWithData(CFDataRef data, CFDictionaryRef options)
2.检查此文件是否是gif图片
UTTypeConformsTo(CGImageSourceGetType(imageSource), kUTTypeGIF) && CGImageSourceGetCount(imageSource) > 1
3.获取gif图片里面的单图数据
(1)获取图片数量:
NSUInteger numberOfFrames = CGImageSourceGetCount(imageSource);
(2)获取gif相关的属性字典:
NSDictionary *imageProperties = CGImageSourceCopyProperties(imageSource, NULL);
NSDictionary *gifProperties = [imageProperties objectForKey:(NSString *)kCGImagePropertyGIFDictionary];
(3)获取gif图片的循环次数
NSInteger loopCount = [gifProperties[(NSString *)kCGImagePropertyGIFLoopCount] unsignedIntegerValue]
(4)循环获取单张图片数据以及对应单图的停滞时间
for (NSUInteger i = 0; i < numberOfFrames; ++i) {
CGImageRef image = CGImageSourceCreateImageAtIndex(imageSource, i, NULL);
NSTimeInterval frameDuration = CGImageSourceGetGifFrameDelay(imageSource, i);
}