传入一个imagesArray数组返回一个GIF(类型为UIImage)

+(UIImage*)animatedGifWithArray:(NSArray*)tabImage; 此类方法用来返回GIF的UIImage类型

 

CreatGif .h

//.h文件

#import <Foundation/Foundation.h>

 

@interface CreateGif : NSObject

 

+ (void) makeAnimatedGif:(NSArray *)tabImage :(UIViewController *)vc;

+(UIImage*)animatedGifWithArray:(NSArray*)tabImage;

@end

 

//CreatGif.m文件

#import <ImageIO/ImageIO.h>

#import <MobileCoreServices/MobileCoreServices.h>

#import "CreateGif.h"

#import "UIImage+animatedGIF.h"

 

@implementation CreateGif

 

+ (void) makeAnimatedGif:(NSArray *)tabImage :(UIViewController *)vc {

    NSUInteger kFrameCount = [tabImage count];

    

    NSDictionary *fileProperties = @{

                                     (__bridge id)kCGImagePropertyGIFDictionary: @{

                                             (__bridge id)kCGImagePropertyGIFLoopCount: @0, // 0 means loop forever

                                             }

                                     };

    

    NSDictionary *frameProperties = @{

                                      (__bridge id)kCGImagePropertyGIFDictionary: @{

                                              (__bridge id)kCGImagePropertyGIFDelayTime: @(0.3f), // a float (not double!) in seconds, rounded to centiseconds in the GIF data

                                              }

                                      };

    

    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];

    NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:@"animated.gif"];

    

    CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL, kUTTypeGIF, kFrameCount, NULL);

    CGImageDestinationSetProperties(destination, (__bridge CFDictionaryRef)fileProperties);

    

    for (NSUInteger i = 0; i < kFrameCount; i++) {

        @autoreleasepool {

            CGImageDestinationAddImage(destination, ((UIImage *)[tabImage objectAtIndex:i]).CGImage, (__bridge CFDictionaryRef)frameProperties);

        }

    }

    if (!CGImageDestinationFinalize(destination)) {

        NSLog(@"failed to finalize image destination");

    }

    CFRelease(destination);

    

    NSLog(@"url=%@", fileURL);

    

    return ;

    NSData *data = [NSData dataWithContentsOfURL:fileURL];

    NSLog(@"data length = %d", [data length]);

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        UIImageWriteToSavedPhotosAlbum([UIImage animatedImageWithAnimatedGIFData:data], nil, nil, nil);

    });

    

    UIView *v = [[UIView alloc] initWithFrame:vc.view.frame];

    UIImageView *imgageV = [[UIImageView alloc] initWithFrame:vc.view.frame];

    

    

    imgageV.image = [UIImage animatedImageWithAnimatedGIFURL:fileURL];

    [v addSubview:imgageV];

    [vc.view addSubview:v];

}

+(UIImage *)animatedGifWithArray:(NSArray *)tabImage{

    NSUInteger kFrameCount = [tabImage count];

    

    NSDictionary *fileProperties = @{

                                     (__bridge id)kCGImagePropertyGIFDictionary: @{

                                             (__bridge id)kCGImagePropertyGIFLoopCount: @0, // 0 means loop forever

                                             }

                                     };

    

    NSDictionary *frameProperties = @{

                                      (__bridge id)kCGImagePropertyGIFDictionary: @{

                                              (__bridge id)kCGImagePropertyGIFDelayTime: @(0.3f), // a float (not double!) in seconds, rounded to centiseconds in the GIF data

                                              }

                                      };

    

    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];

    NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:@"animated.gif"];

    

    CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL, kUTTypeGIF, kFrameCount, NULL);

    CGImageDestinationSetProperties(destination, (__bridge CFDictionaryRef)fileProperties);

    

    for (NSUInteger i = 0; i < kFrameCount; i++) {

        @autoreleasepool {

            CGImageDestinationAddImage(destination, ((UIImage *)[tabImage objectAtIndex:i]).CGImage, (__bridge CFDictionaryRef)frameProperties);

        }

    }

    if (!CGImageDestinationFinalize(destination)) {

    }

    CFRelease(destination);

    NSData *data = [NSData dataWithContentsOfURL:fileURL];

    return [UIImage animatedImageWithAnimatedGIFData:data];

 

}

@end

 

posted @ 2014-11-18 17:27  Shdow_Walker  阅读(357)  评论(0编辑  收藏  举报