以编程方式将图像从api添加到CustomCell变得迟钝

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式将图像从api添加到CustomCell变得迟钝相关的知识,希望对你有一定的参考价值。

滚动时我的表视图变慢,我有一个自定义单元格和一个表视图:

我有这个控制器,在这里进行api调用并填充行程数组,然后在cellForRowAt im中创建单元格

class HistorialViewController: UIViewController , UITableViewDataSource, UITableViewDelegate  {
    @IBOutlet weak var historialTableView: UITableView!
    var trips = [RootClass]()
    override func viewDidLoad() {
        super.viewDidLoad()
        self.historialTableView.delegate = self
        self.historialTableView.dataSource = self

        self.historialTableView.register(CustomCellHistorial.self, forCellReuseIdentifier: cellId)
    }

    override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       print("coming back")
       self.fetchTrips()
    }

     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = self.historialTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! CustomCellHistorial
        let trip = self.trips[indexPath.row]
        cell.trip = trip
        return cell
    }

    private func fetchTrips(){

        AFWrapper.getTripHistory( success: { (jsonResponse) in
            self.trips = []
            for item in jsonResponse["trips"].arrayValue {

                self.trips.append(RootClass(fromJson:item))
            }

            self.reloadTrips()
            Timer.scheduledTimer(withTimeInterval: 2.0, repeats: false) { (nil) in
                self.indicator.stopAnimating()
            }

        }, failure: { (error) -> Void in
            print(error)
        })
    }

    func reloadTrips(){
        DispatchQueue.main.async{
            self.historialTableView.reloadData()
        }
    }

这是我的CustomCell

class CustomCellHistorial : UITableViewCell{
    var trip: RootClass? {
        didSet{
            dateTimeLabel.text = returnCleanDate(fecha: trip!.createdAt)
            distanceAndTimeLabel.text = returnDistanceAndTime(distance: (trip?.trip!.real!.dist!)!, time: (trip?.trip!.real!.time)!)
            priceLabel.text = returnCleanPrice(price: (trip?.trip!.real!.price!)!)
            ratedLabel.text = "Not Rated"

            self.productImage.image = self.returnDriverImage(photoUrl: (self.trip?.driver!.photo!)!)
            if (trip!.score) != nil {

                let score = trip!.score
                if (score?.driver) != nil{
                    if(trip!.score!.driver!.stars! != 0.0 ){
                        ratedLabel.isHidden = true
                    }else{
                        ratedLabel.isHidden = false
                    }
                }else{
                    print("yei")
                }
            }
        }
    }

 private func returnDriverImage(photoUrl: String) -> UIImage{

        let url = URL(string: photoUrl)
        do {
            let data = try Data(contentsOf: url!)

                    if let roundedimg = UIImage(data: data){

                        let croppedImageDriver = roundedimg.resize(toTargetSize: self.productImage.frame.size)

                        return croppedImageDriver
                    }

        } catch let error {
            debugPrint("ERRor :: (error)")
                let image = UIImage(named: "perfilIcono")
            return image!
        }
        let image = UIImage(named: "perfilIcono")
        return image!
    }

我发现的答案适用于较早版本的Swift,以及它们在情节提要中制作tableview的方式,或者不处理自定义单元格。

我认为问题出在returnDriverImage函数中。

答案
此行

let data = try Data(contentsOf: url!)

以上是关于以编程方式将图像从api添加到CustomCell变得迟钝的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将系统图像添加到导航栏

以编程方式将图像添加到线性布局

以编程方式将图像添加到Word文档

如何使用 Graph API 以编程方式将事件添加到页面?

如何在 ios 4 中以编程方式将图像数组添加到 Imageview?

如何以编程方式将不同单元格的不同图像添加到 tableView (Swift)