Gif исчезает в UITableViewCell - PullRequest
0 голосов
/ 14 октября 2019

Я использую ответ на этот вопрос: Как загрузить изображение GIF в Swift? и я добавляю GIF в UITableViewCell. Когда вы открываете таблицу, она работает и она анимируется, но когда я перехожу к другому UIViewController и возвращаюсь к UITableViewController, gif отсутствует. Он появляется только тогда, когда вы .touchUpOutside UITableViewCell. Как решить эту проблему?

class CustomCell: UITableViewCell{

    @IBOutlet weak var theImageView: UIImageView!{
        didSet{
            let loadingGif = UIImage.gifImageWithName("loading")
            theImageView.image = loadingGif
        }
    }
}

1 Ответ

0 голосов
/ 16 октября 2019

Я собираюсь показать все этапы отображения анимированного GIF на UITableViewCell

1) Это мой GifTableViewController, который содержит UITableView

import UIKit

class GifTableViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    var gifs = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()

        loadGifs()
    }

    func loadGifs() {
        gifs.append("https://media.giphy.com/media/XIqCQx02E1U9W/giphy.gif")
        gifs.append("https://media.giphy.com/media/11JTxkrmq4bGE0/giphy.gif")
        gifs.append("https://media.giphy.com/media/eoxomXXVL2S0E/giphy.gif")
        gifs.append("https://media.giphy.com/media/c5wbvuaVVLWzC/giphy.gif")
        gifs.append("https://media.giphy.com/media/l9Jhzwdi09Ve0/giphy.gif")
        gifs.append("https://media.giphy.com/media/8h1Zhv62CVXEc/giphy.gif")
        gifs.append("https://media.giphy.com/media/FgiHOQyKUJmwg/giphy.gif")
        gifs.append("https://media.giphy.com/media/h2MLtoOjxtkGY/giphy.gif")
        gifs.append("https://media.giphy.com/media/ClKnUxoh4SP16/giphy.gif")
        gifs.append("https://media.giphy.com/media/S6fA9ppFTwFhK/giphy.gif")
        gifs.append("https://media.giphy.com/media/EGiBhTZMXedIA/giphy.gif")
    }

}


extension GifTableViewController: UITableViewDataSource, UITableViewDelegate {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return gifs.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "GifTableCell", for: indexPath) as! GifTableCell
        cell.load(with: gifs[indexPath.row])
        return cell
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 200
    }

}

2) Это мой GifTableCell, которыйсодержит UIImageView, который будет представлять gif на

import UIKit

class GifTableCell: UITableViewCell {

    @IBOutlet weak var gifImageView: UIImageView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    func load(with urlString: String) {
        gifImageView.image = nil
        DispatchQueue.global().async { [weak self] in
            guard let url = URL(string: urlString as String) else {
                return
            }
            guard let data = try? Data(contentsOf: url) else {
                return
            }

            DispatchQueue.main.async {
                self?.gifImageView.image = UIImage.gif(data: data)
            }
        }
    }

}

3) Обратите внимание, что UIImage.gif(data: data) оператор. Функция gif является расширением UIImage из библиотеки SwiftGifOrigin

См. Источник: https://github.com/swiftgif/SwiftGif

Вы можете добавить только файл UIImage+Gif.swift для простого использования или включить библиотеку SwiftGifOrigin в свой файл. project.

Изменения для обновления вопроса;

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

class CustomCell: UITableViewCell{

    @IBOutlet weak var theImageView: UIImageView!

    func loadGif() {
        theImageView.image = nil
        DispatchQueue.global().async { [weak self] in
            let loadingGif = UIImage.gifImageWithName("loading")
            DispatchQueue.main.async {
                self?.theImageView.image = loadingGif
            }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...