1- (void)viewDidLoad2{3[super viewDidLoad];4//Do any additional setup after loading the view.56//1:使用第三方库7NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"moe"ofType:@"gif"]];8GifView *dataView = [[GifView alloc] initWithFrame:CGRectMake(50,30,100,100) data:data];9[self.view addSubview:dataView];1011//或者12GifView *pathView =[[GifView alloc] initWithFrame:CGRectMake(170,30,100,100) filePath:[[NSBundle mainBundle] pathForResource:@"moe"ofType:@"gif"]];13[self.view addSubview:pathView];1415//2:使用webview16NSString *path = [[NSBundle mainBundle] pathForResource:@"moe"ofType:@"gif"];17NSData *gifData =[NSData dataWithContentsOfFile:path];18UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(110,150,100,100)];19webView.backgroundColor =[UIColor clearColor];20webView.scalesPageToFit =YES;21[webView loadData:gifData MIMEType:@"image/gif"textEncodingName:nil baseURL:nil];22[self.view addSubview:webView];23}
第三方库代码
////GifView.h//GifDemo//#import<UIKit/UIKit.h>#import<ImageIO/ImageIO.h>@interfaceGifView : 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>@implementationGifView- (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.12target:self selector:@selector(play) userInfo:nil repeats:YES];
[timer fire];
}returnself;
}- (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.12target:self selector:@selector(play) userInfo:nil repeats:YES];
[timer fire];
}returnself;
}-(void)play
{
index++;
index= index%count;
CGImageRefref=CGImageSourceCreateImageAtIndex(gif, index, (__bridge CFDictionaryRef)gifProperties);
self.layer.contents= (__bridgeid)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