-3

I am trying to display animated gif but it doesn't work they stay still.

UIView * tak = [[UIView alloc] initWithFrame:CGRectMake(-10, 0, 560, 685)];
UIImage *image = [UIImage imageNamed:@"animated-f.gif"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = tak.bounds;
[tak addSubview:imageView];
[self.view addSubview:tak];
Cœur
  • 37,241
  • 25
  • 195
  • 267
user460024
  • 13
  • 1
  • 4
  • 1
    hi @user460024 you can refer this link might be helpfull http://stackoverflow.com/questions/39870379/gif-image-not-show – Bhupat Bheda May 05 '17 at 08:57
  • Possible duplicate of [Display animated GIF in iOS](http://stackoverflow.com/questions/9744682/display-animated-gif-in-ios) – Larme May 05 '17 at 09:22

2 Answers2

1

Use FLAnimatedImage library

#import "FLAnimatedImage.h"

NSURL *url = [[NSBundle mainBundle] URLForResource:@"animated-f" withExtension:@"gif"];
    NSData *data = [NSData dataWithContentsOfURL:url];
FLAnimatedImage *image = [FLAnimatedImage animatedImageWithGIFData:data];
FLAnimatedImageView *imageView = [[FLAnimatedImageView alloc] init];
imageView.animatedImage = image;
imageView.frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
[self.view addSubview:imageView];
Sargis
  • 1,196
  • 1
  • 18
  • 31
0

i find this mothod in SDWebImage class UIImage+GIFcan play gif before in version 3.7.2,but This method takes up much memory, in version sd use FLAnimatedImage to replace it, To solve the problem of excessive memory. suggest use FLAnimatedImage

version 3.7.2 code

- (UIImage *)sd_animatedGIFWithData:(NSData *)data {
if (!data) {
    return nil;
}

CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);

size_t count = CGImageSourceGetCount(source);

UIImage *animatedImage;

if (count <= 1) {
    animatedImage = [[UIImage alloc] initWithData:data];
}
else {
    NSMutableArray *images = [NSMutableArray array];

    NSTimeInterval duration = 0.0f;

    for (size_t i = 0; i < count; i++) {
        CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);

        duration += [self sd_frameDurationAtIndex:i source:source];

        [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];

        CGImageRelease(image);
    }

    if (!duration) {
        duration = (1.0f / 10.0f) * count;
    }

    animatedImage = [UIImage animatedImageWithImages:images duration:duration];
}

CFRelease(source);

return animatedImage;
}

- (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source {
float frameDuration = 0.1f;
CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil);
NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties;
NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary];

NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime];
if (delayTimeUnclampedProp) {
    frameDuration = [delayTimeUnclampedProp floatValue];
}
else {

    NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime];
    if (delayTimeProp) {
        frameDuration = [delayTimeProp floatValue];
    }
}

// Many annoying ads specify a 0 duration to make an image flash as quickly as possible.
// We follow Firefox's behavior and use a duration of 100 ms for any frames that specify
// a duration of <= 10 ms. See <rdar://problem/7689300> and <http://webkit.org/b/36082>
// for more information.

if (frameDuration < 0.011f) {
    frameDuration = 0.100f;
}

CFRelease(cfFrameProperties);
return frameDuration;
}
liangju
  • 98
  • 1
  • 5