Skie
Skie

Reputation: 111

how can i update my progress bar step by step?

i have code where i add one constant every second to my array, how can i update my progress bar every second when array is changed?

var array: [Int] = []

override func viewWillAppear(_ animated: Bool) {
        upgradeArray()
    }

    func upgradeArray() {
        for i in 0...10 {
            sleep(1)
            array.append(i)
            print(i)
            let percentProgress = Float(Float(self.array.count)*100.0/10.0)
            progressBar.setProgress(percentProgress, animated: true)
        }

    }

Upvotes: 0

Views: 11047

Answers (2)

Skie
Skie

Reputation: 111

done with DispatchQueue.global(priority: .default).async

func upgradeArray() {
        for i in 0...10 {
            DispatchQueue.global(priority: .default).async {
                //sleep(1)
                self.array.append(i)
                print(i)
                DispatchQueue.main.async(execute: {
                    let percentProgress = Float(Float(self.array.count)*100.0/10.0)
                    self.progressBar.setProgress(percentProgress, animated: true)
                })
            }
        }

    }

Upvotes: 0

Frankie
Frankie

Reputation: 11928

Use a timer. Assuming your progress view is 0 to 1 and incrementing by 0.1 each second...

var timer: Timer?
var array = [String]()

func doStuff() {

    timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in

        self.array.append("foo")

        let change: Float = 0.1
        self.progressView.progress = self.progressView.progress + (change)

        if self.progressView.progress >= 1.0 {
            self.timer?.invalidate()
        }
    })
}

Upvotes: 1

Related Questions