多个 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() )
}
}
}
我正在制作一个 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() )
}
}
}