How do I use an animated .gif in my iPhone applica

2019-01-21 03:26发布

问题:

I have an animated gif file that I want to use in my iPhone application, but the animation doesn't work. Does anybody know how to fix it?

回答1:

If you have a serie of images you want to animate you can easily do it with UIImageView:

UIImage *blur5 = [UIImage imageNamed:@"blur5.png"];
UIImage *blur6 = [UIImage imageNamed:@"blur6.png"];

self.imageView.animationImages = [[NSArray alloc] initWithObjects:blur5, blur6, nil];
self.imageView.animationRepeatCount = 5;
[self.imageView startAnimating];

I found this easier than trying to use UIWebView.



回答2:

UIWebView does not properly display all GIF content. You need to use a UIImageView, but the iPhone OS does not support animated GIFS and only displays the first frame.

So you need to extract all of the other frames first.

Crude example code here: http://pliep.nl/blog/2009/04/iphone_developer_decoding_an_animated_gif_image_in_objc



回答3:

You can use source at http://blog.stijnspijker.nl/2009/07/animated-and-transparent-gifs-for-iphone-made-easy/ It has a GIF decoder that you can use directly to get solution. I successfully used it. But it have some problems with transparency.



回答4:

This can be achieved by this piece of code:

NSArray * imageArray  = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"1.png"], [UIImage imageNamed:@"2.png"], nil]; //this will be the frames of animation images in sequence.
 ringImage = [[UIImageView alloc]initWithFrame:CGRectMake(100,200,600,600)];
 ringImage.animationImages = imageArray;
 ringImage.animationDuration = 1.5;//this the animating speed which you can modify
 ringImage.contentMode = UIViewContentModeScaleAspectFill;
 [ringImage startAnimating];//this method actually does the work of animating your frames.

I know its an old thread..but may be helpful for someone..:)



回答5:

One other option is to decode the gif in your application, and then "frame serve" it to a OpenGL object. This way is less likely to run out of memory for large gifs.