1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view. 5 6 //1:使用第三方库 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 // 或者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:使用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 }
第三方库代码
//// 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
新闻热点
疑难解答