【iOS】在页面中展示gif动图 – EverNight

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:使用webview
16 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

本文链接:【iOS】在页面中展示gif动图,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量