转自:http://blog.csdn.net/lovenjoe/article/details/7487142
iPhone SDK提供了多种动画手段,UIView、UIImageView和CALayer都支持动画。但如何处理常见的gif动画呢?UIWebView提供了答案,代码如下:
1. 使用UIWebView播放
// 设定位置和大小
CGRect frame = CGRectMake(50,50,0,0);
frame.size = [UIImage imageNamed:@"guzhang.gif"].size;
// 读取gif图片数据
NSData *gif = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"guzhang" ofType:@"gif"]];
// view生成
UIWebView *webView = [[UIWebView alloc] initWithFrame:frame];
webView.userInteractionEnabled = NO;//用户不可交互
[webView loadData:gif MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];
[self.view addSubview:webView];
[webView release];
2.将gif图片分解成多张png图片,使用UIImageView播放。
代码如下:
UIImageView *gifImageView = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
NSArray *gifArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"1"],
[UIImage imageNamed:@"2"],
[UIImage imageNamed:@"3"],
[UIImage imageNamed:@"4"],
[UIImage imageNamed:@"5"],
[UIImage imageNamed:@"6"],
[UIImage imageNamed:@"7"],
[UIImage imageNamed:@"8"],
[UIImage imageNamed:@"9"],
[UIImage imageNamed:@"10"],
[UIImage imageNamed:@"11"],
[UIImage imageNamed:@"12"],
[UIImage imageNamed:@"13"],
[UIImage imageNamed:@"14"],
[UIImage imageNamed:@"15"],
[UIImage imageNamed:@"16"],
[UIImage imageNamed:@"17"],
[UIImage imageNamed:@"18"],
[UIImage imageNamed:@"19"],
[UIImage imageNamed:@"20"],
[UIImage imageNamed:@"21"],
[UIImage imageNamed:@"22"],nil];
gifImageView.animationImages = gifArray; //动画图片数组
gifImageView.animationDuration = 5; //执行一次完整动画所需的时长
gifImageView.animationRepeatCount = 1; //动画重复次数
[gifImageView startAnimating];
[self.view addSubview:gifImageView];
[gifImageView release];
注意:这个方法,如果gif动画每桢间的时间间隔不同,不能达到此效果。
3.三方
转自:http://www.cnblogs.com/huangzhenwei/p/5979773.html
实网上GitHub有很多第三方的,但是用起来比较麻烦,这里介绍最简单的一种方式,,(点击按钮开始播放动态图)
1,集成SDWebImage之后,引入头文件#import "UIImage+GIF.h"
2.初始化按钮,(loadingImageView是定义的全局的UIImageView,自己顶一下)
self.loadingImageView= [[UIImageView alloc]init];
UIButton* btn=[[UIButton alloc]initWithFrame:CGRectMake(0, 100, 50, 20)];
btn.backgroundColor=[UIColor redColor];
[self.view addSubview:btn];
[btn addTarget:self action:@selector(initLoadingImageView) forControlEvents:UIControlEventTouchUpInside];
3.点击按钮就可以实现了,非常简单
- (void)initLoadingImageView
{
NSString *name = @"图片的名字.gif";
NSString *filePath = [[NSBundle bundleWithPath:[[NSBundle mainBundle] bundlePath]] pathForResource:name ofType:nil];
NSData *imageData = [NSData dataWithContentsOfFile:filePath];
if (!self.loadingImageView) {
self.loadingImageView = [[UIImageView alloc]init];
}
self.loadingImageView.backgroundColor = [UIColor clearColor];
self.loadingImageView.image = [UIImage sd_animatedGIFWithData:imageData];
//这里可以修改要实现播放的gif的frame
self.loadingImageView.frame = CGRectMake(0, 100, 200, 100);
[self.view addSubview:self.loadingImageView];
[self.view bringSubviewToFront:self.loadingImageView];
}
如果想实现gif图片的暂停和继续播放的功能加入以下两个方法就可以了
1.首先再viewDidLoad加入这个(player是CALayer类型的,定义为全局的)
// 设置imageView的layer
player = self.loadingImageView.layer;
2.实现这两个方法,需要用哪个就点击哪个直接把player传过去就可以了
//暂停gif的方法
-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
//继续gif的方法
-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}
//本人使用三方SDWebImage
UIImageView *imgv = [[UIImageView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:imgv];
imgv.backgroundColor = [UIColor clearColor];
NSString *str = [[NSBundle mainBundle]pathForResource:@"asdf" ofType:@"gif"];
NSData *data = [NSData dataWithContentsOfFile:str];
imgv.image = [UIImage sd_animatedGIFWithData:data];