大家好,好久沒(méi)有跟新了。其實(shí)也就昨天到今天的時(shí)間。
前言:實(shí)際上,GIF動(dòng)圖文件中包含了一組圖片及其信息數(shù)組,這些信息數(shù)據(jù)記錄著這一組圖片中各張圖片的播放時(shí)長(zhǎng)等信息,我們可以將圖片和這些信息或取出來(lái),使用UIImageView的幀動(dòng)畫(huà)技術(shù)進(jìn)行動(dòng)畫(huà)播放。
好了不多說(shuō)了 ?開(kāi)始上代碼吧:
首先自己找一個(gè)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文件數(shù)據(jù)
CGImageSourceRefsource =CGImageSourceCreateWithURL((CFURLRef)[NSURLfileURLWithPath:dataPath],NULL);
//3.獲取gif文件中圖片的個(gè)數(shù)
size_tcount =CGImageSourceGetCount(source);
//4.定義一個(gè)變量記錄gif播放一輪的時(shí)間
floatallTime =0;
//5.定義一個(gè)可變數(shù)組存放所有圖片
NSMutableArray*imageArray = [[NSMutableArrayalloc]init];
//6.定義一個(gè)可變數(shù)組存放每一幀播放的時(shí)間
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]];
//統(tǒng)計(jì)時(shí)間
NSDictionary*timeDic = [infoobjectForKey:(__bridgeNSString*)kCGImagePropertyGIFDictionary];
CGFloattime = [[timeDicobjectForKey:(__bridgeNSString*)kCGImagePropertyGIFDelayTime]floatValue];
[timeArrayaddObject:[NSNumbernumberWithFloat:time]];
}
//添加幀動(dòng)畫(huà)
CAKeyframeAnimation*animation = [CAKeyframeAnimationanimationWithKeyPath:@"contents"];
NSMutableArray*times = [[NSMutableArrayalloc]init];
floatcurrentTime =0;
//設(shè)置每一幀的時(shí)間占比
for(inti=0; i
[timesaddObject:[NSNumbernumberWithFloat:currentTime/allTime]];
currentTime +=[timeArray[i]floatValue];
}
[animationsetKeyTimes:times];
[animationsetValues:imageArray];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionLinear]];
//設(shè)置循環(huán)
animation.repeatCount=MAXFLOAT;
//設(shè)置播放總時(shí)長(zhǎng)
animation.duration= allTime*MAXFLOAT;
//Layer層添加
[[imageViewlayer]addAnimation:animationforKey:@"gifAnimation"];
}
這個(gè)是源代碼:
下面是我打印出來(lái)的信息:
好了,今天就到這里了,謝謝大家的支持。我的博客地址:www.cnblogs.com/PengHongMiao
另外附上GitHub地址:https://github.com/PengHongMiao