GIF图片使用

来源:互联网 发布:jquery向数组添加元素 编辑:程序博客网 时间:2024/06/14 15:02

.h文件

//  UIImageView+GIF.h
//  DemoGif
//
//  Created by yidong on 15/12/5
#import <UIKit/UIKit.h>
 
@interface UIImageView (GIF)
 
// 从指定的路径加载GIF并创建UIImageView
+ (UIImageView*)imageViewWithGIFFile:(NSString*)file frame:(CGRect)frame;
 
@end

.m文件

 
//  UIImageView+GIF.m
//  DemoGif
//
//  Created by yidong on 15/12/5
 
#import "UIImageView+GIF.h"
#import <ImageIO/ImageIO.h>
 
@implementation UIImageView (GIF)
 
+ (UIImageView*)imageViewWithGIFFile:(NSString*)file frame:(CGRect)frame
{
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:frame];
 
    // 加载gif文件数据
    NSData *gifData = [NSData dataWithContentsOfFile:file];
 
    // GIF动画图片数组
    NSMutableArray *frames = nil;
    // 图像源引用
    CGImageSourceRef src = CGImageSourceCreateWithData((__bridge CFDataRef)gifData,NULL);
    // 动画时长
    CGFloat animationTime = 0.f;
 
    if (src) {
        // 获取gif图片的帧数
        size_t count = CGImageSourceGetCount(src);
        // 实例化图片数组
        frames = [NSMutableArray arrayWithCapacity:count];
 
        for (size_ti = 0; i < count; i++) {
            // 获取指定帧图像
            CGImageRef image = CGImageSourceCreateImageAtIndex(src, i, NULL);
 
            // 获取GIF动画时长
            NSDictionary *properties = (__bridge NSDictionary*)CGImageSourceCopyPropertiesAtIndex(src, i,NULL);
            NSDictionary *frameProperties = [propertiesobjectForKey:(NSString*)kCGImagePropertyGIFDictionary];
            NSNumber*delayTime = [frameProperties objectForKey:(NSString*)kCGImagePropertyGIFUnclampedDelayTime];
            animationTime += [delayTimefloatValue];
 
            if (image) {
                [frames addObject:[UIImage imageWithCGImage:image]];
                CGImageRelease(image);
            }
        }
 
        CFRelease(src);
    }
 
    [imageView setImage:[frames objectAtIndex:0]];
    [imageView setAnimationImages:frames];
    [imageView setAnimationDuration:animationTime];
    [imageView startAnimating];
   
    return imageView;
}
 
@end

直接在控制器里面使用


//  ViewController.m
//  GIF图片使用
 
#import "ViewController.h"
#import "UIImageView+GIF.h"
 
@interface ViewController()
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
 
    // 对于gif格式的图片,必须要加@2x
    NSString *path = [[NSBundle mainBundle]pathForResource:@"lengtuchongbai.gif@2x" ofType:@"png"];
      UIImageView *imageView = [UIImageView imageViewWithGIFFile:path
                                                        frame:CGRectMake(60,130, 200, 200)];
    [self.view addSubview:imageView];
}
 
@end

1 0