多个 UITableViewCells 每个都有 UIProgressView 更新非常慢

Multiple UITableViewCells each with UIProgressView very slow to update

我正在制作一个 UITableView 中有 10 UITableViewCells 的游戏。 10 个 UITableViewCells 中的每个都有一个 UIProgressView 加上许多其他视图。我每 1/10 秒更新一次 UITableView,这非常慢并且在旧设备上滞后。我每 1/10 秒更新一次 UX,给游戏带来流畅的进度视图感觉。

有没有办法只单独更新每个单元格中的进度视图,而不必调用 tableView.reloadData() 来更新每个单元格中的所有视图?

代码示例:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = self.tableView.dequeueReusableCell(withIdentifier: "businessCell", for: indexPath) as! BusinessCell

            cell.progress.progress = Float( businessArray[indexPath.row-1].getCurrentProgress() )

        //lots of other views are updated here

        return cell
    }
}

我可以更改此行吗:

cell.progress.progress = Float( businessArray[indexPath.row-1].getCurrentProgress() )

像这样:

cell.progress.progress = someVarLocalToViewControllerContainingTableView[indexPath.row]

当我更新这个本地变量时,它只会更新 progressView 或其他东西吗? 我尝试了很多方法,但不知道该怎么做...

您可以使用:

self.tableView .reloadRows(at: <[IndexPath]>, with: <UITableViewRowAnimation>)

而不是使用 tableView.reloadData()

请检查下面link:

  • Is it possible to refresh a single UITableViewCell in a UITableView?

它可能对您的情况有所帮助。

如果您需要更新特定单元格的进度,请调用此

func reloadProgress(at index: Int) {
     let indexPath = IndexPath(row: index, section: 0)

        if let cell = tableView.cellForRow(at: indexPath) as? BusinessCell {
            cell.progress.progress = Float( businessArray[index - 1].getCurrentProgress() )
        }
}

如果您需要重新加载 table 中的所有柱:

func reloadProgress() {
        for indexPath in tableView.indexPathsForVisibleRows ?? [] {

            if let cell = tableView.cellForRow(at: indexPath) as? BusinessCell {
                cell.progress.progress = Float( businessArray[indexPath.row - 1].getCurrentProgress() )
            }
        }
    }