Добавить анимированное изображение Gif в Iphone UIImageView

Мне нужно загрузить анимированное изображение Gif из URL-адреса в UIImageview.

Когда я использовал обычный код, изображение не загружалось.

Есть ли другой способ загрузки анимированных изображений Gif?

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.

Вы можете разделить свой gif, используя следующую команду ImageMagick :

 convert +adjoin loading.gif out%d.gif 

Это нашло приемлемый ответ, но я недавно встретил расширение 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 Image. Добавьте SDWebImage из Github в свой проект.

 #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 и установить корень в строку.

Вот интересная библиотека: https://github.com/Flipboard/FLAnimatedImage

Я тестировал демонстрационный пример, и он отлично работает. Это ребенок UIImageView. Поэтому я думаю, что вы тоже можете использовать его в своей раскадровке.

ура

Я знаю, что ответ уже одобрен, но его трудно не пытаться поделиться тем, что я создал встроенную инфраструктуру, которая добавляет поддержку Gif для iOS, которая так же ощущается, если вы используете какой-либо другой class UIKit Framework.

Вот пример:

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

Загрузите последнюю версию с https://github.com/ObjSal/UIGifImage/releases

– Саль

Если вы должны загрузить изображение gif из URL, вы всегда можете вставлять gif в тег изображения в 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:

Как было предложено выше, я использую FLAnimatedImage с FLAnimatedImageView. И я загружаю gif как dataset из xcassets. Это позволяет мне предоставлять различные gif для iphone и ipad для внешнего вида и использования приложений. Это намного больше, чем я пробовал. Также легко приостановить использование .stopAnimating ().

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

SWIFT 3

Вот обновление для тех, кому нужна версия Swift !.

Несколько дней назад мне нужно было сделать что-то подобное. Я загружаю некоторые данные с сервера по определенным параметрам, и тем временем я хотел показать другое изображение gif «загрузка». Я искал вариант сделать это с UIImageView но, к сожалению, я не нашел что-то сделать, не разбивая изображения .gif. Поэтому я решил реализовать решение с использованием UIWebView и хочу поделиться им:

 extension UIView{ func animateWithGIF(name: String){ let htmlString: String = "" + "" + "" + "" + "" 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 меня есть UIView именем «loadView», который является моим индикатором загрузки и всякий раз, когда я хотел показать изображение .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.animatedImageNamed под названием UIImage.animatedImageNamed следующим образом:

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

Из документов:

Этот метод загружает ряд файлов, добавляя серию чисел в имя базового файла, указанное в параметре имени. Все изображения, включенные в анимированное изображение, должны иметь одинаковый размер и масштаб.

Или вы можете сделать это с UIImage.animatedImageWithImages метода UIImage.animatedImageWithImages следующим образом:

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

Из документов:

Создает и возвращает анимированное изображение из существующего набора изображений. Все изображения, включенные в анимированное изображение, должны иметь одинаковый размер и масштаб.

Если вы знаете продолжительность файла gif, вам не нужна сторонняя библиотека.

 extension UIImage { class func getImagesFromGIF(asset: String) -> [UIImage]? { guard let dataAsset = NSDataAsset(name: asset) else { print("Cannot turn image named \"\(asset)\" into NSDataAsset") return nil } guard let source = CGImageSourceCreateWithData(dataAsset.data as CFData, nil) else { print("Source for the image does not exist") return nil } let count = CGImageSourceGetCount(source) var images = [UIImage]() for i in 0.. 

Чтобы использовать это расширение,

 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) DispatchQueue.global().async { if let images = UIImage.getImagesFromGIF(asset: "GIFFILENAME") { let gifDuration = 5.0 // need to change this DispatchQueue.main.async { self.imageView.animationImages = images self.imageView.animationDuration = gifDuration self.imageView.startAnimating() } } } } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) imageView.stopAnimating() } 
  • UISlider для управления AVAudioPlayer
  • Запустите NSRunLoop в командной строке программы Cocoa
  • Воспроизведение музыки в фоновом режиме с помощью AVAudioplayer
  • Пользовательские цвета в UITabBar
  • Получить процентное использование процессора
  • Замена на устаревший размерWithFont: в iOS 7?
  • Как я могу отложить вызов метода на 1 секунду?
  • iOS 5: Интересно о UIAppearance
  • Точка с запятой после имени метода в файле реализации Objective-C
  • Синглтон в iOS 5?
  • Выясните, нажал ли пользователь кнопку «Назад» в controllerе uinavigation?
  • Давайте будем гением компьютера.