美文网首页iOS OC 学习手册
iOS----使用UIImageView播放GIF

iOS----使用UIImageView播放GIF

作者: 喵希尔伯特 | 来源:发表于2016-09-22 21:20 被阅读0次

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

    前言:实际上,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

    相关文章

      网友评论

        本文标题:iOS----使用UIImageView播放GIF

        本文链接:https://www.haomeiwen.com/subject/qwraettx.html