iOS常用技术-序列帧动画

 1 //
 2 //  ViewController.m
 3 //  序列帧动画
 4 //
 5 //  Created by 大欢 on 16/1/20.
 6 //  Copyright © 2016年 bjsxt. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 #import "UIImageView+GIF.h"
11 
12 @interface ViewController ()
13 - (IBAction)playAction:(id)sender;
14 - (IBAction)stopAction:(id)sender;
15 
16 @property (nonatomic, strong) UIImageView * imageView;
17 
18 @end
19 
20 @implementation ViewController
21 
22 - (void)viewDidLoad {
23     [super viewDidLoad];
24     
25     //播放gif动画
26     NSString * path = [[NSBundle mainBundle] pathForResource:@"hehua" ofType:@"gif"];
27     UIImageView * imageView = [UIImageView imageViewWithGIFFile:path frame:CGRectMake(100, 100, 200, 200)];
28     [self.view addSubview:imageView];
29 
30 }
31 
32 - (void)animation {
33     
34     NSMutableArray * array = [NSMutableArray array];
35     
36     for (int i = 1; i < 6; i++) {
37         
38         NSString * string = [NSString stringWithFormat:@"hehua0%d",i];
39         UIImage * image = [UIImage imageNamed:string];
40         [array addObject:image];
41     }
42     
43     self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
44     //设置动画图片
45     self.imageView.animationImages = array;
46     //动画时间
47     self.imageView.animationDuration = 1;
48     //动画播放重复次数,值为0时,无限循环
49     self.imageView.animationRepeatCount = 0;
50     //开始动画
51     [self.imageView startAnimating];
52     [self.view addSubview:self.imageView];
53 }
54 
55 
56 - (IBAction)playAction:(id)sender {
57     
58     [self.imageView stopAnimating];
59 }
60 
61 - (IBAction)stopAction:(id)sender {
62     
63     [self.imageView startAnimating];
64 }
65 @end

/********************************************/

 1 //
 2 //  UIImageView+GIF.h
 3 //  day3
 4 //
 5 //  Created by andezhou on 16/1/2.
 6 //  Copyright © 2016年 周安德. All rights reserved.
 7 //
 8 
 9 #import <UIKit/UIKit.h>
10 
11 @interface UIImageView (GIF)
12 
13 // 从指定的路径加载GIF并创建UIImageView
14 + (UIImageView *)imageViewWithGIFFile:(NSString *)file frame:(CGRect)frame;
15 
16 @end

/************************************************/

 1 //
 2 //  UIImageView+GIF.m
 3 //  day3
 4 //
 5 //  Created by andezhou on 16/1/2.
 6 //  Copyright © 2016年 周安德. All rights reserved.
 7 //
 8 
 9 #import "UIImageView+GIF.h"
10 #import <ImageIO/ImageIO.h>
11 #import <CoreText/CoreText.h>
12 /*
13  ARC下需要手动管理内存的有(Core)
14  CT开头,例如:CTRunRef
15  CF开头,例如:CTFrameRef
16  CG开头,例如:CGImageSourceRef
17  */
18 
19 @implementation UIImageView (GIF)
20 
21 + (UIImageView *)imageViewWithGIFFile:(NSString *)file frame:(CGRect)frame
22 {
23     UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
24     // 加载gif文件数据
25     NSData *gifData = [NSData dataWithContentsOfFile:file];
26     
27     // GIF动画图片数组
28     NSMutableArray *frames = nil;
29     // 图像源引用
30     CGImageSourceRef src = CGImageSourceCreateWithData((__bridge CFDataRef)gifData, NULL);
31     // 动画时长
32     CGFloat animationTime = 0.f;
33     
34     if (src) {
35         // 获取gif图片的帧数
36         size_t count = CGImageSourceGetCount(src);
37         // 实例化图片数组
38         frames = [NSMutableArray arrayWithCapacity:count];
39         
40         for (size_t i = 0; i < count; i++) {
41             // 获取指定帧图像
42             CGImageRef image = CGImageSourceCreateImageAtIndex(src, i, NULL);
43             
44             // 获取GIF动画时长
45             NSDictionary *properties = (__bridge NSDictionary *)CGImageSourceCopyPropertiesAtIndex(src, i, NULL);
46             NSDictionary *frameProperties = [properties objectForKey:(NSString *)kCGImagePropertyGIFDictionary];
47             NSNumber *delayTime = [frameProperties objectForKey:(NSString *)kCGImagePropertyGIFUnclampedDelayTime];
48             animationTime += [delayTime floatValue];
49             
50             if (image) {
51                 [frames addObject:[UIImage imageWithCGImage:image]];
52                 CGImageRelease(image);
53             }
54         }
55         
56         CFRelease(src);
57     }
58     
59     [imageView setImage:[frames objectAtIndex:0]];
60     [imageView setBackgroundColor:[UIColor clearColor]];
61     [imageView setAnimationImages:frames];
62     [imageView setAnimationDuration:animationTime];
63     [imageView startAnimating];
64     
65     return imageView;
66 }
67 
68 @end

/*****************************************************/

posted @ 2016-01-20 21:44  MrWuYindi  阅读(582)  评论(0编辑  收藏  举报