// // GifView.m // GIFViewer // // Created by xToucher04 on 11-11-9. // Copyright 2011 Toucher. All rights reserved. // #import "GifView.h" #import @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