Gif在UITableViewCell中消失

问题描述 投票:0回答:1

我正在使用以下问题的答案:How to load GIF image in Swift?,并将gif添加到UITableViewCell中。当您打开表格时,它可以工作并且具有动画效果,但是当我转到另一个UIViewController并返回到UITableViewController时,gif不存在。仅当您在UITableViewCell的.touchUpOutside时显示。如何解决该问题?

swift uitableview uiimage gif
1个回答
0
投票

我将展示在UITableViewCell上显示动画gif的所有阶段

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 on

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函数是SwiftGifOrigin库中的UIImage扩展]

查看来源:https://github.com/swiftgif/SwiftGif

© www.soinside.com 2019 - 2024. All rights reserved.