1.系統UIImageView 多張圖片組成動畫
/**
* UIImageView 動畫
* Memory-23M
*/
-(void)gifPlay1
{
// NSArray *array=@[@"image0.png",@"image1.png",@"image2.png"];
// UIImageView *imgview= [UIImageView imageViewAnimation:CGRectMake(50,80, 550/2, 200) imageNames:array duration:1];
UIImageView* animatedImageView = [[UIImageView alloc] initWithFrame:CGRectMake(50,80, 550/2, 200)];
animatedImageView.animationImages =@[[UIImage imageNamed:@"image0"],
[UIImage imageNamed:@"image1"],
[UIImage imageNamed:@"image2"],
];
animatedImageView.animationDuration = 1.0f;
animatedImageView.animationRepeatCount = 0;
[self.view addSubview: animatedImageView];
[animatedImageView startAnimating];
}
2.利用第三方庫
1)IImageView-PlayGIF YFGIFImageView
/**
* UIImageView-PlayGIF 是 UIImageView 子類,用來顯示 GIF。UIIMageView-PlayGIF 性能高,而且占用的內存很低。
* https://github.com/yfme/UIImageView-PlayGIF
* Memory-21.9M
* #import "YFGIFImageView.h"
*/
-(void)gifPlay2
{
NSString *gifPath=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"gif"];
YFGIFImageView *gifview=[[YFGIFImageView alloc]init];
gifview.backgroundColor=[UIColor clearColor];
gifview.gifPath=gifPath;
gifview.frame=CGRectMake(50, 100,550/2, 200);
[self.view addSubview:gifview];
[gifview startGIF];
}
2)SCGIFImageView
/**
* 摘要: SCGIFImageView是一個開源的GIF圖片動畫顯示控件,通過將GIF的每一幀都取出來生成UIImage對象存放在一個數組中,然后使用NSTimer進行動畫輪轉。
* https://github.com/shichangone/SCGifExample
* Memory-22.5M
* #import "SCGIFImageView.h"
*/
-(void)gifPlay3
{
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"test.gif" ofType:nil];
NSData* imageData = [NSData dataWithContentsOfFile:filePath];
SCGIFImageView* gifImageView = [[SCGIFImageView alloc]init];
[gifImageView setData:imageData];
gifImageView.frame = CGRectMake(50,100, gifImageView.image.size.width, gifImageView.image.size.height);
[self.view addSubview:gifImageView];
}
3)YLGIFImage
/**
* YLGIFImage 是異步 GIF 圖像解碼器和圖像查看器,支持播放 GIF 圖像,而且使用很少的內存。
* https://github.com/liyong03/YLGIFImage
* Memory-22.7M
* #import "YLImageView.h"
* #import "YLGIFImage.h"
*/
-(void)gifPlay5
{
YLImageView* imageView = [[YLImageView alloc] initWithFrame:CGRectMake(0, 160, 320, 240)];
[self.view addSubview:imageView];
imageView.image = [YLGIFImage imageNamed:@"test.gif"];
}
4)SDWebImageView里的UIImage+GIF
提供接口:
+ (UIImage *)sd_animatedGIFNamed:(NSString *)name;
+ (UIImage *)sd_animatedGIFWithData:(NSData *)data;
- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;
/**
* 利用SDWebImageView 庫播放gif
* Memory-22.6M
* #import "UIImage+GIF.h"
*/
-(void)gifPlay6
{
UIImage *image=[UIImage sd_animatedGIFNamed:@"test"];
UIImageView *gifview=[[UIImageView alloc]initWithFrame:CGRectMake(50,80,image.size.width, image.size.height)];
gifview.backgroundColor=[UIColor orangeColor];
gifview.image=image;
[self.view addSubview:gifview];
}
為MBProgressHUD 添加加載動畫
/**
* MBProgressHUD 添加加載動畫
* Memory-23.8M
* #import "UIImage+GIF.h"
* #import "MBProgressHUD.h"
*/
-(void)gifPlay6
{
UIImage *image=[UIImage sd_animatedGIFNamed:@"test"];
UIImageView *gifview=[[UIImageView alloc]initWithFrame:CGRectMake(0,0,image.size.width/2, image.size.height/2)];
gifview.image=image;
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.color=[UIColor grayColor];//默認顏色太深了
hud.mode = MBProgressHUDModeCustomView;
hud.labelText = @"加載中...";
hud.customView=gifview;
}
其它
微博客戶端 VVebo 的作者開源了他自己為VVebo寫的GIF解決方案 VVeboImageView, 占用內存很小。(iOS移動開發周報-第4期)

Demo下載
http://yunpan.cn/cj6JBN7mfETWE (提取碼:226f)
