在APP开发过程中能用到gif图的地方无非就是刷新和加载动画了(等用到小动画的地方).但是UIImageView是无法直接加载gif图的,ImageView提供了一个加载动画图片数组的方法..那要有很多帧.png/.jpg的图片才行…但是像我这种没有美工的开发,网上只找了一张gif图怎么办….
为数组类别,添加一个类方法–由一张项目中的gif图的名字返回其中很多帧UIImage的数组.
@interface NSArray (CDIExtention)
/** 将一个gif图转换为一帧一帧的图片数组*/
+ (NSArray *)cdi_imagesWithGif:(NSString *)gifNameInBoundle;
导入ImageIO框架
(1) 获取到GIF图的源数据 CGImageSourceRef
CGImageSourceRef gifSource = CGImageSourceCreateWithURL((CFURLRef)fileUrl, NULL);
(2) 由源数据 SourceRef生成一张CGImageRef类型图片
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(gifSource, i, NULL);
(3) 有CGImageRef生成UIImage ,我们想要的.
UIImage *image = [UIImage imageWithCGImage:imageRef];
.m文件内容如下,最好要返回数组,方便ImageView截取数组哪一段进行动画
#import <ImageIO/ImageIO.h>
@implementation NSArray (CDIExtention)
+ (NSArray *)cdi_imagesWithGif:(NSString *)gifNameInBoundle {
NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:gifNameInBoundle withExtension:@"gif"];
CGImageSourceRef gifSource = CGImageSourceCreateWithURL((CFURLRef)fileUrl, NULL);
size_t gifCount = CGImageSourceGetCount(gifSource);
NSMutableArray *frames = [[NSMutableArray alloc]init];
for (size_t i = 0; i< gifCount; i++) {
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(gifSource, i, NULL);
UIImage *image = [UIImage imageWithCGImage:imageRef];
[frames addObject:image];
CGImageRelease(imageRef);
}
return frames;
}
@end