iOS----使用UIImageView播放GIF

大家好,好久没有跟新了。其实也就昨天到今天的时间。

前言:实际上,GIF动图文件中包含了一组图片及其信息数组,这些信息数据记录着这一组图片中各张图片的播放时长等信息,我们可以将图片和这些信息或取出来,使用UIImageView的帧动画技术进行动画播放。

好了不多说了  开始上代码吧:

首先自己找一个GIF图吧,拖到工程里面。

- (void)createGIF {

UIImageView*imageView = [[UIImageViewalloc]initWithFrame:CGRectMake(20,100,280,200)];

[self.viewaddSubview:imageView];

//1.找到gif文件路径

NSString*dataPath = [[NSBundlemainBundle]pathForResource:@"11"ofType:@"gif"];

//2.获取gif文件数据

CGImageSourceRefsource =CGImageSourceCreateWithURL((CFURLRef)[NSURLfileURLWithPath:dataPath],NULL);

//3.获取gif文件中图片的个数

size_tcount =CGImageSourceGetCount(source);

//4.定义一个变量记录gif播放一轮的时间

floatallTime =0;

//5.定义一个可变数组存放所有图片

NSMutableArray*imageArray = [[NSMutableArrayalloc]init];

//6.定义一个可变数组存放每一帧播放的时间

NSMutableArray*timeArray = [[NSMutableArrayalloc]init];

//7.每张图片的宽度

NSMutableArray*widthArray = [[NSMutableArrayalloc]init];

//8.每张图片的高度

NSMutableArray*heightArray = [[NSMutableArrayalloc]init];

//遍历gif

for(size_ti=0; i

CGImageRefimage =CGImageSourceCreateImageAtIndex(source, i,NULL);

[imageArrayaddObject:(__bridgeUIImage*)(image)];

CGImageRelease(image);

//获取图片信息

NSDictionary*info = (__bridgeNSDictionary*)CGImageSourceCopyPropertiesAtIndex(source, i,NULL);

NSLog(@"info---%@",info);

//获取宽度

CGFloatwidth = [[infoobjectForKey:(__bridgeNSString*)kCGImagePropertyPixelWidth]floatValue];

//获取高度

CGFloatheight = [[infoobjectForKey:(__bridgeNSString*)kCGImagePropertyPixelHeight]floatValue];

//

[widthArrayaddObject:[NSNumbernumberWithFloat:width]];

[heightArrayaddObject:[NSNumbernumberWithFloat:height]];

//统计时间

NSDictionary*timeDic = [infoobjectForKey:(__bridgeNSString*)kCGImagePropertyGIFDictionary];

CGFloattime = [[timeDicobjectForKey:(__bridgeNSString*)kCGImagePropertyGIFDelayTime]floatValue];

[timeArrayaddObject:[NSNumbernumberWithFloat:time]];

}

//添加帧动画

CAKeyframeAnimation*animation = [CAKeyframeAnimationanimationWithKeyPath:@"contents"];

NSMutableArray*times = [[NSMutableArrayalloc]init];

floatcurrentTime =0;

//设置每一帧的时间占比

for(inti=0; i

[timesaddObject:[NSNumbernumberWithFloat:currentTime/allTime]];

currentTime +=[timeArray[i]floatValue];

}

[animationsetKeyTimes:times];

[animationsetValues:imageArray];

[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionLinear]];

//设置循环

animation.repeatCount=MAXFLOAT;

//设置播放总时长

animation.duration= allTime*MAXFLOAT;

//Layer层添加

[[imageViewlayer]addAnimation:animationforKey:@"gifAnimation"];

}

这个是源代码:

iOS----使用UIImageView播放GIF_第1张图片
iOS----使用UIImageView播放GIF_第2张图片
iOS----使用UIImageView播放GIF_第3张图片
iOS----使用UIImageView播放GIF_第4张图片

下面是我打印出来的信息:

iOS----使用UIImageView播放GIF_第5张图片

好了,今天就到这里了,谢谢大家的支持。我的博客地址:www.cnblogs.com/PengHongMiao

另外附上GitHub地址:https://github.com/PengHongMiao

你可能感兴趣的:(iOS----使用UIImageView播放GIF)