Добавить анимированное изображение Gif в Iphone UIImageView
Мне нужно загрузить анимированное изображение Gif из URL-адреса в UIImageview.
Когда я использовал обычный код, изображение не загружалось.
Есть ли другой способ загрузки анимированных изображений Gif?
- Можно ли отключить плавающие заголовки в UITableView с помощью UITableViewStylePlain?
- Что такое двойная звезда (например, NSError **)?
- фильтрация NSArray в новый NSArray в объективе-c
- Есть ли способ подавить предупреждения в Xcode?
- UIDatePicker, устанавливающий максимальные и минимальные даты на основе сегодняшней даты
- iPhone: как передавать данные между несколькими Viewcontrollers в приложении Tabbar
- iOS HTTP-запрос в фоновом режиме
- iOS 5 не позволяет сохранять загруженные данные в папке «Документы»?
- Автоматически запускать локальные уведомления ежедневно в динамическое время, заданное в массивах. objective ios
- Ошибка: протокол недоступен, сброс backtrace
- Перемещение UIView (изображение и текст)
- Загрузка изображений из фоновой темы с использованием блоков
- Получить нажатие кнопки внутри UITableViewCell
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"];
Проверить эту ссылку
и импортировать эти класики 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() }