首页 > 代码库 > 【iOS】在页面中展示gif动图
【iOS】在页面中展示gif动图
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view. 5 6 //1:使用第三方库 7 NSData *data = http://www.mamicode.com/[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 =http://www.mamicode.com/ [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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。