Swift 3: загрузить GIF в UIWebView

Я хочу загрузить GIF в свое приложение Swift 3. Я использовал этот код для этого, но гифка не отображается.

let filePath = Bundle.main.path(forResource: “myGif”, ofType: "gif")
let gif = NSData(contentsOfFile: filePath!)
self.webView.load(gif! as Data, mimeType: "image/gif", textEncodingName: String(), baseURL: NSURL() as URL)
self.webView.isUserInteractionEnabled = false

Я не знаю, что не так с моим кодом (я новичок в разработке Swift и iOS).

Любая помощь, пожалуйста?


person Ne AS    schedule 22.11.2016    source источник
comment
Независимо от того, почему вы используете NSData(contentsOfFile:) вместо Data(contentsOf:options:)? Используйте классы Swift, особенно когда следующая строка преобразует класс Какао в класс Swift.   -  person rmaddy    schedule 22.11.2016
comment
Возможный дубликат Правильный способ загрузки изображения в UIWebView из NSData объект   -  person Ryan    schedule 22.11.2016
comment
@rmaddy, потому что я получил эту ошибку, когда использую Data: метки аргументов '(contentsOfFile :)' не соответствуют ни одной доступной перегрузке   -  person Ne AS    schedule 22.11.2016
comment
@Ryan, извини, но это не дублированный вопрос. Я использую быстрый, а не объективный-c   -  person Ne AS    schedule 22.11.2016
comment
@Llg Верно, потому что это Data(contentsOf:options:), а не Data(contentsOfFile:).   -  person rmaddy    schedule 22.11.2016
comment
@rmaddy, пожалуйста, что мне поставить для опций? Я использовал это, но похоже, что он не работает Data(contentsOf: URL(string:filePath!)!, options:nil)   -  person Ne AS    schedule 22.11.2016
comment
@Llg Вы уверены, что NSData(contentOfFile: filePath!) не равен нулю? Также textEncodingName не может быть String().   -  person Ryan    schedule 22.11.2016
comment
@Ryan для NSData (contentOfFile: filePath!) Я вижу его количество байтов при отладке, так что это не ноль. Не могли бы вы привести мне рабочий пример, чтобы я мог понимать все больше и больше?   -  person Ne AS    schedule 22.11.2016
comment
@Llg Это неправильный инициализатор для создания URL из пути к файлу.   -  person rmaddy    schedule 22.11.2016


Ответы (2)


Я нашел SwiftGif Lbrary на github, он не использует веб-просмотр (если вы хотите использовать веб-просмотр, напишите мне комментарии для обновления ответа)

РЕДАКТИРОВАТЬ:

Веб-просмотр:

let url = Bundle.main.url(forResource: "source", withExtension: "gif")!
let data = try! Data(contentsOf: url)
webview.load(data, mimeType: "image/gif", textEncodingName: "UTF-8", baseURL: NSURL() as URL)
webview.scalesPageToFit = true
webview.contentMode = UIViewContentMode.scaleAspectFit

Надеюсь, поможет.

person mike vorisis    schedule 22.11.2016
comment
Спасибо, я уже нашел это репо, но я использую swift 3 и ios 8+. Не могли бы вы дать мне версию для веб-просмотра? - person Ne AS; 22.11.2016
comment
@Llg это для быстрого 3, я только что тестировал в xcode 8 (но я обновлю его с помощью веб-просмотра) - person mike vorisis; 22.11.2016
comment
@Llg Райан первым ответил на ваш вопрос, проверьте его код, он работает. - person mike vorisis; 22.11.2016
comment
Да, работает, спасибо! Не могли бы вы увидеть мой комментарий в ответе Райана? - person Ne AS; 22.11.2016
comment
Я не тестировал его, потому что у меня нет большого gif, но я пытаюсь изменить раскадровку, выберите веб-просмотр, а затем из правого меню измените режим содержимого, чтобы он соответствовал размеру - person mike vorisis; 22.11.2016
comment
Большое спасибо! Я это протестирую. Извините, если я задаю много вопросов, но как сделать так, чтобы гифка всегда играла? Мои гифки перестают анимироваться через некоторое время - person Ne AS; 22.11.2016
comment
Позвольте нам продолжить это обсуждение в чате. - person mike vorisis; 22.11.2016
comment
@Llg ты это исправил? - person mike vorisis; 22.11.2016

Вот рабочий пример. Я загрузил изображение в формате GIF из Интернета и добавил его в образец проекта.

let url = Bundle.main.url(forResource: "hsk", withExtension: "gif")!
let data = try! Data(contentsOf: url)
webView.load(data, mimeType: "image/gif", textEncodingName: "UTF-8", baseURL: NSURL() as URL)

С помощью приведенного выше кода я мог видеть анимированный gif, как показано ниже.

введите описание изображения здесь

person Ryan    schedule 22.11.2016
comment
Спасибо, это работает! Что делать, если размер веб-просмотра меньше, чем у гифки? Другими словами, я хочу вставить в небольшой веб-просмотр, но я хочу показать все содержимое гифки (я не хочу прокручивать, чтобы увидеть скрытые части гифки) - person Ne AS; 22.11.2016
comment
Есть способ проверить размер содержимого webView и, возможно, вы можете написать html / css для уменьшения размера gif. Если вы используете webView только для отображения анимированного gif, вы можете извлекать данные и анимировать их с помощью UIImageView или использовать стороннюю библиотеку, например Гифу - person Ryan; 22.11.2016
comment
Спасибо, Райан. И последний вопрос: как сделать так, чтобы гифка всегда играла? Мои гифки перестают анимироваться через некоторое время - person Ne AS; 22.11.2016
comment
Не уверен, пока вы используете UIWebView. Если вы используете UIImageView, вы можете запускать анимацию несколько раз или останавливать ее, когда захотите. - person Ryan; 22.11.2016
comment
Могу ли я использовать UIImageView с GIF? Да, не могли бы вы привести мне пример? - person Ne AS; 22.11.2016
comment
Об этом я сказал в предыдущем комментарии. Может быть, вы можете сослаться на исходный код Gifu. - person Ryan; 22.11.2016
comment
Я не использовал его, потому что мое целевое развертывание min ios - iOS 8, а Gifu требует iOS 9. - person Ne AS; 22.11.2016
comment
Существует множество сторонних библиотек для обработки анимированных gif в UIImageView. Обыщите это. Это даже не по теме. - person Ryan; 22.11.2016
comment
Позвольте нам продолжить это обсуждение в чате. - person Ryan; 22.11.2016