12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- //
- // GifView.m
- // GIFViewer
- //
- // Created by xToucher04 on 11-11-9.
- // Copyright 2011 Toucher. All rights reserved.
- //
- #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((CFURLRef)[NSURL fileURLWithPath:_filePath], (CFDictionaryRef)gifProperties);
- count =CGImageSourceGetCount(gif);
- timer = [NSTimer scheduledTimerWithTimeInterval:0.4 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 = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:_filePath], (CFDictionaryRef)gifProperties);
- gif = CGImageSourceCreateWithData((CFDataRef)_data, (CFDictionaryRef)gifProperties);
- count =CGImageSourceGetCount(gif);
- timer = [NSTimer scheduledTimerWithTimeInterval:0.7 target:self selector:@selector(play) userInfo:nil repeats:YES];
- [timer fire];
- }
- return self;
- }
- -(void)play
- {
- index ++;
- index = index%count;
- CGImageRef ref = CGImageSourceCreateImageAtIndex(gif, index, (CFDictionaryRef)gifProperties);
- self.layer.contents = (__bridge id)ref;
- CFRelease(ref);
- }
- -(void)removeFromSuperview
- {
- NSLog(@"GifView removeFromSuperview, is MainThread %d", [NSThread isMainThread]);
- [timer invalidate];
- timer = nil;
- [super removeFromSuperview];
- }
- - (void)dealloc {
- NSLog(@"GifView dealloc..., is MainThraed %d", [NSThread isMainThread]);
- CFRelease(gif);
-
- NSLog(@"GifView dealloc finish");
- }
- @end
|