在Iphone的UIImageView添加animation的GIF图像

我需要从UIImageView中的URL加载animationGIF图像。

当我使用正常的代码,图像没有加载。

有没有其他的方式来加载animationGIF图像?

UIImageView* animatedImageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; animatedImageView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"image1.gif"], [UIImage imageNamed:@"image2.gif"], [UIImage imageNamed:@"image3.gif"], [UIImage imageNamed:@"image4.gif"], nil]; animatedImageView.animationDuration = 1.0f; animatedImageView.animationRepeatCount = 0; [animatedImageView startAnimating]; [self.view addSubview: animatedImageView]; 

您可以加载多个gif图像。

你可以使用下面的ImageMagick命令拆分你的gif:

 convert +adjoin loading.gif out%d.gif 

这已经find了一个被接受的答案,但我最近遇到了UIImage + animatedGIF UIImage扩展。 它提供了以下类别:

 +[UIImage animatedImageWithAnimatedGIFURL:(NSURL *)url] 

允许你简单地:

 #import "UIImage+animatedGIF.h" UIImage* mygif = [UIImage animatedImageWithAnimatedGIFURL:[NSURL URLWithString:@"http://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif"]]; 

像魔术一样工作。

这是使用Gif图像的最佳解决scheme。 在你的项目中添加Github的SDWebImage。

 #import "UIImage+GIF.h" _imageViewAnimatedGif.image= [UIImage sd_animatedGIFNamed:@"thumbnail"]; 

检查这个链接

https://github.com/mayoff/uiimage-from-animated-gif/blob/master/uiimage-from-animated-gif/UIImage%2BanimatedGIF.h

并导入这些类UIImage + animatedGIF.h,UIImage + animatedGIF.m

使用这个代码

  NSURL *urlZif = [[NSBundle mainBundle] URLForResource:@"dots64" withExtension:@"gif"]; NSString *path=[[NSBundle mainBundle]pathForResource:@"bar180" ofType:@"gif"]; NSURL *url=[[NSURL alloc] initFileURLWithPath:path]; imageVw.image= [UIImage animatedImageWithAnimatedGIFURL:url]; 

希望这是有益的

这不符合使用UIImageView的要求,但也许这会为你简化的事情。 你有没有考虑过使用UIWebView?

 NSString *gifUrl = @"http://gifs.com"; NSURL *url = [NSURL URLWithString: gifUrl]; [webView loadRequest: [NSURLRequest requestWithURL:url] 

如果你想,而不是链接到一个需要互联网的URL,你可以导入一个HTML文件到你的Xcode项目中,并设置string的根。

这是一个有趣的图书馆: https : //github.com/Flipboard/FLAnimatedImage

我testing了这个演示例子,效果很好。 这是UIImageView的一个孩子。 所以我想你也可以直接在Storyboard中使用它。

干杯

我知道一个答案已经被批准,但是很难不尝试分享我创build了一个embedded式框架,它增加了对iOS的Gif支持,就像使用任何其他的UIKit框架类一样。

这是一个例子:

 UIGifImage *gif = [[UIGifImage alloc] initWithData:imageData]; anUiImageView.image = gif; 

https://github.com/ObjSal/UIGifImage/releases下载最新版本;

– 萨尔

如果您必须从URL加载gif图像,则可以将gifembedded到UIWebView中的图像标签中。

你可以使用https://github.com/Flipboard/FLAnimatedImage

 #import "FLAnimatedImage.h" NSData *dt=[NSData dataWithContentsOfFile:path]; imageView1 = [[FLAnimatedImageView alloc] init]; FLAnimatedImage *image1 = [FLAnimatedImage animatedImageWithGIFData:dt]; imageView1.animatedImage = image1; imageView1.frame = CGRectMake(0, 5, 168, 80); [self.view addSubview:imageView1]; 

Swift 3:

如上所示,我使用FLAnimatedImageView和FLAnimatedImageView。 我从xcassets加载gif作为数据集。 这使我可以为iPhone和iPad提供不同的GIF图片用于外观和应用程序切片的目的。 这比我尝试过的其他任何东西都要高效得多。 使用.stopAnimating()暂停也很容易。

 if let asset = NSDataAsset(name: "animation") { let gifData = asset.data let gif = FLAnimatedImage(animatedGIFData: gifData) imageView.animatedImage = gif } 

SWIFT 3

这是谁需要的Swift版本的更新!

几天前我需要做这样的事情。 我根据特定参数从服务器加载一些数据,同时我想显示一个不同的“加载”的gif图像。 我正在寻找一个选项来做到这一点与UIImageView但不幸的是,我没有find没有拆分.gif图像的东西。 所以我决定实现一个使用UIWebView的解决scheme,我想分享它:

 extension UIView{ func animateWithGIF(name: String){ let htmlString: String = "<!DOCTYPE html><html><head><title></title></head>" + "<body style=\"background-color: transparent;\">" + "<img src=\""+name+"\" align=\"middle\" style=\"width:100%;height:100%;\">" + "</body>" + "</html>" let path: NSString = Bundle.main.bundlePath as NSString let baseURL: URL = URL(fileURLWithPath: path as String) // to load images just specifying its name without full path let frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height) let gifView = UIWebView(frame: frame) gifView.isOpaque = false // The drawing system composites the view normally with other content. gifView.backgroundColor = UIColor.clear gifView.loadHTMLString(htmlString, baseURL: baseURL) var s: [UIView] = self.subviews for i in 0 ..< s.count { if s[i].isKind(of: UIWebView.self) { s[i].removeFromSuperview() } } self.addSubview(gifView) } func animateWithGIF(url: String){ self.animateWithGIF(name: url) } } 

我做了一个UIView的扩展,它增加了一个UIWebView作为子视图,并显示只传递其名称的.gif图像。

现在在我的UIViewController我有一个名为“loadingView”的UIView这是我的“加载”指标,每当我想显示.gif图像,我做了这样的事情:

 class ViewController: UIViewController { @IBOutlet var loadingView: UIView! override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) configureLoadingView(name: "loading.gif") } override func viewDidLoad() { super.viewDidLoad() // .... some code // show "loading" image showLoadingView() } func showLoadingView(){ loadingView.isHidden = false } func hideLoadingView(){ loadingView.isHidden = true } func configureLoadingView(name: String){ loadingView.animateWithGIF(name: "name")// change the image } } 

当我想要改变gif图像时,只需要调用函数configureLoadingView()以及我的新的.gif图像的名称,然后调用showLoadingView()hideLoadingView()正常工作了。

但…

…如果你有图像拆分,那么你可以用一个UIImage静态方法在一行中animation它,这个方法叫做UIImage.animatedImageNamed像这样:

imageView.image = UIImage.animatedImageNamed("imageName", duration: 1.0)

从文档:

此方法通过将一系列数字附加到name参数中提供的基本文件名称来加载一系列文件。 包含在animation图像中的所有图像应具有相同的大小和比例。

或者你可以像这样使用UIImage.animatedImageWithImages方法:

 let images: [UIImage] = [UIImage(named: "imageName1")!, UIImage(named: "imageName2")!, ..., UIImage(named: "imageNameN")!] imageView.image = UIImage.animatedImage(with: images, duration: 1.0) 

从文档:

从现有图像集创build并返回animation图像。 包含在animation图像中的所有图像应具有相同的大小和比例。

SWIFT:假设您有一个名为“abg.gif”的animationgif图像。 由于UIImage支持gif,但不支持gif animation ,所以可以使用Apple Developer提供的Quick Look框架。 (不需要第三方)。 以下是简单的工作代码

导入QuickLook //不要忘记导入QuickLook框架

 class ViewController: UIViewController,QLPreviewControllerDataSource { override func viewDidLoad() { super.viewDidLoad() let qpc = QLPreviewController() qpc.dataSource = self self.addChildViewController(qpc) self.view.addSubview(qpc.view) } func numberOfPreviewItemsInPreviewController(controller: QLPreviewController) -> Int{ return 1 } func previewController(controller: QLPreviewController, previewItemAtIndex index: Int) -> QLPreviewItem{ let path = NSBundle.mainBundle().pathForResource("abg", ofType: "gif") return NSURL(fileURLWithPath:path!) }