1-(void) viewDidLoad 2 {3 [super viewDidLoad]; 4 // Do any additional setup after loading the view. 5 6 // 1: Use a third-party Library 7 NSData * data = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @ "moe" ofType: @ "gif"]; 8 GifView * dataView = [[GifView alloc] initWithFrame: CGRectMake (50, 30,100,100) data: data]; 9 [self. view addSubview: dataView]; 10 11 // or 12 GifView * pathView = [[GifView alloc] initWithFrame: CGRectMake (170, 30,100,100) filePath: [[NSBundle mainBundle] pathForResource: @ "moe" ofType: @ "gif"]; 13 [self. view addSubview: pathView]; 14 15 // 2: Use webview16 NSString * path = [[NSBundle mainBundle] pathForResource: @ "moe" ofType: @ "gif"]; 17 NSData * gifData = [NSData dataWithContentsOfFile: path]; 18 UIWebView * webView = [[UIWebView alloc] initWithFrame: CGRectMake (110,150,100,100)]; 19 webView. backgroundColor = [UIColor clearColor]; 20 webView. scalesPageToFit = YES; 21 [webView loadData: gifData MIMEType: @ "image/gif" textEncodingName: nil baseURL: nil]; 22 [self. view addSubview: webView]; 23}
Third-party library code
//// GifView.h// GifDemo//#import <UIKit/UIKit.h>#import <ImageIO/ImageIO.h>@interface GifView : UIView{ CGImageSourceRef gif; NSDictionary *gifProperties; size_t index; size_t count; NSTimer *timer;}- (id)initWithFrame:(CGRect)frame filePath:(NSString *)_filePath;- (id)initWithFrame:(CGRect)frame data:(NSData *)_data;@end
//// GifView.m// GifDemo//#import "GifView.h"#import <QuartzCore/QuartzCore.h>@implementation GifView- (id)initWithFrame:(CGRect)frame filePath:(NSString *)_filePath{ self = [super initWithFrame:frame]; if (self) { gifProperties = [NSDictionary dictionaryWithObject:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCGImagePropertyGIFLoopCount]forKey:(NSString *)kCGImagePropertyGIFDictionary]; gif = CGImageSourceCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:_filePath], (__bridge CFDictionaryRef)gifProperties); count =CGImageSourceGetCount(gif); timer = [NSTimer scheduledTimerWithTimeInterval:0.12 target:self selector:@selector(play) userInfo:nil repeats:YES]; [timer fire]; } return self;}- (id)initWithFrame:(CGRect)frame data:(NSData *)_data{ self = [super initWithFrame:frame]; if (self) { gifProperties = [NSDictionary dictionaryWithObject:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCGImagePropertyGIFLoopCount]forKey:(NSString *)kCGImagePropertyGIFDictionary]; gif = CGImageSourceCreateWithData((__bridge CFDataRef)_data, (__bridge CFDictionaryRef)gifProperties); count =CGImageSourceGetCount(gif); timer = [NSTimer scheduledTimerWithTimeInterval:0.12 target:self selector:@selector(play) userInfo:nil repeats:YES]; [timer fire]; } return self;}-(void)play{ index ++; index = index%count; CGImageRef ref = CGImageSourceCreateImageAtIndex(gif, index, (__bridge CFDictionaryRef)gifProperties); self.layer.contents = (__bridge id)ref; CFRelease(ref);}-(void)removeFromSuperview{ NSLog(@"removeFromSuperview"); [timer invalidate]; timer = nil; [super removeFromSuperview];}- (void)dealloc{ NSLog(@"dealloc"); CFRelease(gif);}/* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */@end