UIProgressView не показывает прогресс (iOS)

У меня есть приложение, которое обновляет устройство BLE с помощью iOSDFULibrary.

У меня есть эта функция:

   func dfuProgressDidChange(for part: Int, outOf totalParts: Int, to progress: Int, currentSpeedBytesPerSecond: Double, avgSpeedBytesPerSecond: Double) {
       print("\t\(part)\t\(totalParts)\t\(progress)\t\(currentSpeedBytesPerSecond)\t\(avgSpeedBytesPerSecond)")
}

Когда происходит обновление, я хочу, чтобы мой UIProgressView перемещался соответственно progress и полностью заполнялся, когда прогресс достигает 100.

Что у меня есть до сих пор:

@IBOutlet weak var progressView: UIProgressView!


progressView.progressViewStyle = .default
progressView.tintColor = .orange
progressView.progressTintColor = .orange
progressView.backgroundColor = .none
progressView.progress = Float(progress)
progressView.setProgress(100.0, animated: true)

person Lilya    schedule 26.06.2020    source источник


Ответы (2)


func dfuProgressDidChange(for part: Int, outOf totalParts: Int, to progress: Int, currentSpeedBytesPerSecond: Double, avgSpeedBytesPerSecond: Double) {
    let progress = Float(part) / Float(total)
    progressView.setProgress(progress, animated: true)
}

Также я заметил, что вы установили 100 прогресса в ProgressView.

progressView.setProgress(100.0, animated: true)

Максимальный прогресс ProgressView – 1.0.

open class UIProgressView : UIView, NSCoding {

    open var progress: Float // 0.0 .. 1.0, default is 0.0. values outside are pinned.

}
person Данил Блинов    schedule 26.06.2020
comment
Привет @Данил Блинов и большое спасибо за ваш комментарий. Дело в том, что я также пытался установить и progressView.setProgress(progress, animated: true), и progressView.setProgress(1.0, animated: true), но это не дало никаких результатов. При значении 1.0 анимация просто заполняет половину UIProgressView, и с этого момента она замедляется и медленно достигает конца. - person Lilya; 26.06.2020

Оказалось, что я должен был избегать добавления в свой код:

progressView.setProgress(100.0, animated: true)

Я удалил это. Максимальное значение, как было сказано ранее, 1.0, а мой прогресс 0-100. Итак, чтобы progressView отображало изменение, я должен сначала преобразовать свой прогресс в Float, а затем разделить его на 100, поэтому у нас есть максимальное значение 1,0, а не 100:

progressView.progress = Float(progress)/100

Итак, теперь мой код выглядит так:

@IBOutlet weak var progressView: UIProgressView!


progressView.progressViewStyle = .default
progressView.tintColor = .orange
progressView.progressTintColor = .orange
progressView.backgroundColor = .none

    func dfuProgressDidChange(for part: Int, outOf totalParts: Int, to progress: Int, currentSpeedBytesPerSecond: Double, avgSpeedBytesPerSecond: Double) {
        print("\t\(part)\t\(totalParts)\t\(progress)\t\(currentSpeedBytesPerSecond)\t\(avgSpeedBytesPerSecond)")
        
        progressView.progress = Float(progress)/100
    }
person Lilya    schedule 30.06.2020