- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //1:使用第三方庫 NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"moe" ofType:@"gif"]]; GifView *dataView = [[GifView alloc] initWithFrame:CGRectMake(50, 30, 100, 100) data:data]; [self.view addSubview:dataView]; // 或者 GifView *pathView =[[GifView alloc] initWithFrame:CGRectMake(170, 30, 100, 100) filePath:[[NSBundle mainBundle] pathForResource:@"moe" ofType:@"gif"]]; [self.view addSubview:pathView]; //2:使用webview NSString *path = [[NSBundle mainBundle] pathForResource:@"moe" ofType:@"gif"]; NSData *gifData = [NSData dataWithContentsOfFile:path]; UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(110, 150, 100, 100)]; webView.backgroundColor = [UIColor clearColor]; webView.scalesPageToFit = YES; [webView loadData:gifData MIMEType:@"image/gif" textEncodingName:nil baseURL:nil]; [self.view addSubview:webView]; }
第三方庫代碼
// // 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