我正在寻找可以以编程方式帮助我在UIProgressView
上添加UITableViewCell
的帖子/链接/指南。目前,我按住的每个单元播放从 Firebase 流式传输的音频,放开时,音频停止。我想添加一个ProgressView,它首先以清晰的色调覆盖单元的整个框架,但变为浅蓝色或其他颜色,以描述其从左到右的进度。音频的持续时间将确定进度视图的速度。我已经搜索了SO,只能找到几年前用 Obj C 编写的similar posts;寻找使用最新的Swift语言编写的内容。以下是我在Google上搜索到的随机gif,它显示了我在寻找什么。任何帮助将不胜感激。
更新1:
我要求得到持续时间并适用于进度。 UIProgressView
记录进度从左到右的持续时间。现在唯一的问题是,当我按下 any 单元格来播放其各自的音频时,会播放 first 单元格的进度条。下面是我正在使用的代码。
@objc func updateProgress(){
let duration = Float((player.currentItem?.duration.seconds)!)
let currentTime = Float((player.currentItem?.currentTime().seconds)!)
let progressTotal = currentTime/duration
let indexPath = IndexPath(row: self.tag, section: 0)
if progressTotal > 0 {
if let cell = tableView.cellForRow(at: indexPath) as? PostTableViewCell {
if currentTime != duration || currentTime/duration != 1 {
cell.progressBar.progress = progressTotal
cell.progressBar.progressTintColor = UIColor.blue
} else {
timer?.invalidate()
if timer != nil {
timer?.invalidate()
timer = nil
print("Timer Stopped")
}
}
}
}
}
答案 0 :(得分:0)
您可以在表格视图单元格中获取 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
}}