Search code examples
swiftprogress-bargrand-central-dispatchuiprogressview

ProgressBar not moving in ViewController


I am despreate with this ProgressBar-issue.

The below code shall test a ProgressBar-update.

But the View only shows a frozen bar with progress = 0

What is wrong here ???

What is necessary (else than dispatching on the main-queue) for a UIProgressView to work ?

Here is my code:

import UIKit

class TestViewController: UIViewController {

    @IBOutlet weak var progressBarOutlet: UIProgressView!

    override func viewDidLoad() {
        super.viewDidLoad()

        DispatchQueue.main.async {
            // self.progressBarOutlet = UIProgressView()
            self.progressBarOutlet.isHidden = false
            var i = 0
            while i < 10 {
                i = i + 1
                self.progressBarOutlet.setProgress(Float(Float(i) * Float(0.1)), animated: true)
                self.progressBarOutlet.progress = Float(Float(i) * Float(0.1))
                sleep(1)
            }
        }
    }
}

Solution

  • You can tweak your calculation on setting the progress. It is always better to use

    setProgress: animated:

    I altered bit of your code and seems to be working.

    Code Snippet:

            DispatchQueue.main.async {
                  var i = 0
                  while i < 10 {
                       self.progressBarOutlet.setProgress(Float(i), animated: true)
                      i += 1
                  }
            }