Swift Gif在UITableViewCell中消失
我使用的是这个问题的答案:我将gif添加到UITableViewCell中。当您打开表格时,它工作并且正在制作动画,但是当我转到另一个UIViewController并返回UITableViewController时,gif不在那里。仅当您在UITableViewCell外部进行.TouchUp操作时,它才会显示。如何解决这个问题Swift Gif在UITableViewCell中消失,swift,uitableview,uiimage,gif,Swift,Uitableview,Uiimage,Gif,我使用的是这个问题的答案:我将gif添加到UITableViewCell中。当您打开表格时,它工作并且正在制作动画,但是当我转到另一个UIViewController并返回UITableViewController时,gif不在那里。仅当您在UITableViewCell外部进行.TouchUp操作时,它才会显示。如何解决这个问题 class CustomCell: UITableViewCell{ @IBOutlet weak var theImageView: UIImageVie
class CustomCell: UITableViewCell{
@IBOutlet weak var theImageView: UIImageView!{
didSet{
let loadingGif = UIImage.gifImageWithName("loading")
theImageView.image = loadingGif
}
}
}
我将在UITableViewCell上显示显示动画gif的所有阶段 1) 这是包含UITableView的GifTableViewController
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,它将在
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扩展
见资料来源:
您可以只添加UIImage+Gif.swift
文件以便简单地使用,或者将SwiftGifOrigin库包含到您的项目中
编辑问题更新强>
上面的示例显示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
}
}
}
}
如何“转到另一个UIViewController”?你用的是segues还是导航控制器?您可能正在创建包含表视图的UIViewController的第二个实例。看看这篇关于切换到视图控制器然后再切换回的帖子是否有用:你能放一些代码吗?对于BarButtonItem或UITableViewCell,单击无关紧要。当UITableViewController消失时,gif也会消失。使用上面的代码并将gif添加到UITableViewCell以查看。