大家好,好久没有跟新了。其实也就昨天到今天的时间。
前言:实际上,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"];
}
这个是源代码:
下面是我打印出来的信息:
好了,今天就到这里了,谢谢大家的支持。我的博客地址:www.cnblogs.com/PengHongMiao
另外附上GitHub地址:https://github.com/PengHongMiao
网友评论