美文网首页
UIImageView显示GIF图片

UIImageView显示GIF图片

作者: 先生先森 | 来源:发表于2020-06-18 16:55 被阅读0次

    UIImageView+Kit.h文件

    #import

    NS_ASSUME_NONNULL_BEGIN

    @interface UIImageView (Kit)

    - (void)loadGIFImageNamed:(NSString *)name;

    @end

    NS_ASSUME_NONNULL_END

    #import "UIImageView+Kit.h"

    @implementation UIImageView (Kit)

    - (void)loadGIFImageNamed:(NSString *)name {

        /// 找到GIF图片文件路径

        NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:name withExtension:@"gif"];

        /// 将GIF图片转换成对应的图片资源

        CGImageSourceRefimageSourceRef =CGImageSourceCreateWithURL((__bridgeCFURLRef)fileUrl,NULL);

        /// 从图片资源中获取图片帧数,即由多少图片元素组成(注:GIF图片本质是有多张图片合成流动图片)

        size_timageCount =CGImageSourceGetCount(imageSourceRef);

        /// 定义数组拆分图片源

        NSMutableArray*images = [NSMutableArrayarrayWithCapacity:imageCount];

        /// 定义动画持续时长

        floatanimationDuration =0.f;

        /// 循环获取图片元素

        for(size_ti =0; i < imageCount; i++) {

            /// 从图片资源中取出图片元素,即每一帧的图片

            CGImageRefimageRef =CGImageSourceCreateImageAtIndex(imageSourceRef, i ,NULL);

            ///图片转换

            UIImage*image = [UIImageimageWithCGImage:imageRef];

            ///存储图片

            [imagesaddObject:image];

            ///获取元素图片的信息

            NSDictionary*imageElementInfo = (__bridgeNSDictionary*)CGImageSourceCopyProperties(imageSourceRef,NULL);

            ///获取元素动画信息

            NSDictionary*imageElementGIFInfo = [imageElementInfoobjectForKey:(__bridgeNSString*)kCGImagePropertyGIFDictionary];

            /// 初始化每帧之间间隔的属性。

            CGFloatduration =0.1f;

            NSNumber*unclampedDelayTime = [imageElementGIFInfoobjectForKey:(__bridgeNSString*)kCGImagePropertyGIFUnclampedDelayTime];

            if(unclampedDelayTime) {

                duration= unclampedDelayTime.floatValue;

            }else{

                NSNumber*delayTime = [imageElementGIFInfoobjectForKey:(__bridgeNSString*)kCGImagePropertyGIFDelayTime];

                if(delayTime) {

                    duration= delayTime.floatValue;

                }

            }

            /// 获取延迟时间可能为0.f

            if(duration <=0.011f) duration =0.100f;

            animationDuration += duration;

            ///释放内存

            CGImageRelease(imageRef);

        }

        /// 图片控件载入动画图片数组

        self.animationImages= images;

        /// 设置动画持续时长

        self.animationDuration= animationDuration;

        /// 设置动画重复次数

        self.animationRepeatCount = MAXFLOAT;

        ///开启动画

        [self startAnimating];

    }

    @end

    相关文章

      网友评论

          本文标题:UIImageView显示GIF图片

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