UITableView Cell перекрывается с UIProgressView и обновляется при воспроизведении аудио - PullRequest
0 голосов
/ 27 августа 2018

Я ищу сообщение / ссылку / руководство, которое программно поможет мне добавить UIProgressView сверх UITableViewCell.В настоящее время каждая ячейка, которую я удерживаю, воспроизводит звук, передаваемый с Firebase , и когда я отпускаю звук отключается.Я хотел бы добавить ProgressView, который сначала покрывает весь кадр ячейки с отчетливым оттенком, но становится светло-голубым или другим цветом, отображающим прогресс слева направо.Длительность звука будет определять скорость просмотра прогресса.Я искал через SO и могу найти только похожих сообщений , написанных в Obj C лет назад;ищу что-нибудь написанное на последнем языке Swift.Ниже приведен случайный подарок, который я гуглил, который показывает, что я ищу.Любая помощь очень ценится.

enter image description here

ОБНОВЛЕНИЕ 1: Мне удалось узнать продолжительность и применить к прогрессу.UIProgressView регистрирует время, в течение которого процесс продвигается слева направо соответственно.Единственная проблема заключается в том, что, когда я нажимаю на любую ячейку , чтобы воспроизвести соответствующий звук, отображается индикатор выполнения для первой ячейки.Ниже приведен код, который я использую.

@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")
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете взять 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
    }
}}

, и вы можете установить его из раскадровки enter image description here

теперь вы можете управлять прогрессом, перезагружая одну ячейку, см. Ниже код, который я сделал, используя время, которым вы можете управлять, используя таймер песни,

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
}}
...