//
// ViewController.m
// 序列帧动画
//
// Created by 大欢 on 16/1/20.
// Copyright © 2016年 bjsxt. All rights reserved.
//
#import "ViewController.h"
#import "UIImageView+GIF.h"
@interface ViewController ()
- (IBAction)playAction:(id)sender;
- (IBAction)stopAction:(id)sender;
@property (nonatomic, strong) UIImageView * imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//播放gif动画
NSString * path = [[NSBundle mainBundle] pathForResource:@"hehua" ofType:@"gif"];
UIImageView * imageView = [UIImageView imageViewWithGIFFile:path frame:CGRectMake(100, 100, 200, 200)];
[self.view addSubview:imageView];
}
- (void)animation {
NSMutableArray * array = [NSMutableArray array];
for (int i = 1; i < 6; i++) {
NSString * string = [NSString stringWithFormat:@"hehua0%d",i];
UIImage * image = [UIImage imageNamed:string];
[array addObject:image];
}
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
//设置动画图片
self.imageView.animationImages = array;
//动画时间
self.imageView.animationDuration = 1;
//动画播放重复次数,值为0时,无限循环
self.imageView.animationRepeatCount = 0;
//开始动画
[self.imageView startAnimating];
[self.view addSubview:self.imageView];
}
- (IBAction)playAction:(id)sender {
[self.imageView stopAnimating];
}
- (IBAction)stopAction:(id)sender {
[self.imageView startAnimating];
}
@end
/********************************************/
//
// UIImageView+GIF.h
// day3
//
// Created by andezhou on 16/1/2.
// Copyright © 2016年 周安德. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface UIImageView (GIF)
// 从指定的路径加载GIF并创建UIImageView
+ (UIImageView *)imageViewWithGIFFile:(NSString *)file frame:(CGRect)frame;
@end
/************************************************/
//
// UIImageView+GIF.m
// day3
//
// Created by andezhou on 16/1/2.
// Copyright © 2016年 周安德. All rights reserved.
//
#import "UIImageView+GIF.h"
#import <ImageIO/ImageIO.h>
#import <CoreText/CoreText.h>
/*
ARC下需要手动管理内存的有(Core)
CT开头,例如:CTRunRef
CF开头,例如:CTFrameRef
CG开头,例如:CGImageSourceRef
*/
@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_t i = 0; i < count; i++) {
// 获取指定帧图像
CGImageRef image = CGImageSourceCreateImageAtIndex(src, i, NULL);
// 获取GIF动画时长
NSDictionary *properties = (__bridge NSDictionary *)CGImageSourceCopyPropertiesAtIndex(src, i, NULL);
NSDictionary *frameProperties = [properties objectForKey:(NSString *)kCGImagePropertyGIFDictionary];
NSNumber *delayTime = [frameProperties objectForKey:(NSString *)kCGImagePropertyGIFUnclampedDelayTime];
animationTime += [delayTime floatValue];
if (image) {
[frames addObject:[UIImage imageWithCGImage:image]];
CGImageRelease(image);
}
}
CFRelease(src);
}
[imageView setImage:[frames objectAtIndex:0]];
[imageView setBackgroundColor:[UIColor clearColor]];
[imageView setAnimationImages:frames];
[imageView setAnimationDuration:animationTime];
[imageView startAnimating];
return imageView;
}
@end
/*****************************************************/
原文:http://www.cnblogs.com/MrWuYindi/p/5146700.html