Вы можете взять UIProgressView внутри ячейки табличного представления и дневную высоту индикатора выполнения, заданную расширением, как показано ниже
extension UIProgressView {
@IBInspectable var barHeight : CGFloat {
get {
return transform.d * 2.0
}
set {
// 2.0 Refers to the default height of 2
let heightScale = newValue / 2.0
let c = center
transform = CGAffineTransform(scaleX: 1.0, y: heightScale)
center = c
}
}}
, и вы можете установить его из раскадровки
теперь вы можете управлять прогрессом, перезагружая одну ячейку, см. Ниже код, который я сделал, используя время, которым вы можете управлять, используя таймер песни,
class ProgressCell: UITableViewCell {
@IBOutlet weak var lblTitle: UILabel!
@IBOutlet weak var progressBar: UIProgressView!}
class ViewController: UIViewController {
var progress = 0.0
var progressTimer: Timer!
@IBOutlet weak var tblProgress: UITableView!
func reloadProgress(at index: Int) {
let indexPath = IndexPath(row: index, section: 0)
// start the timer
progressTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(timerAction), userInfo: ["indexPath":indexPath], repeats: true)
}
// called every time interval from the timer
@objc func timerAction() {
progress += 0.05
if Int(progress) == 1 {
progressTimer.invalidate()
}else{
let indexPath = (progressTimer.userInfo as! [String:Any])["indexPath"] as! IndexPath
tblProgress.reloadRows(at: [indexPath], with: .none)
}
}}
extension ViewController: UITableViewDataSource,UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tblProgress.dequeueReusableCell(withIdentifier: "ProgressCell") as! ProgressCell
cell.lblTitle.text = "house of highlights"
cell.progressBar.progress = Float(progress)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
progress = 0.0
reloadProgress(at: indexPath.row)
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}}