首页 > 移动平台 > 详细

iOS常用技术-序列帧动画

时间:2016-01-20 22:39:02      阅读:352      评论:0      收藏:0      [点我收藏+]

//
//  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
/*****************************************************/

技术分享

技术分享

iOS常用技术-序列帧动画

原文:http://www.cnblogs.com/MrWuYindi/p/5146700.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!