UIProgressView не обновляется, но заголовок - PullRequest
0 голосов
/ 05 марта 2019

Это настоящий скребок, я использую очередь операций примерно так:

let queue = OperationQueue()
queue.qualityOfService = .userInteractive
queue.addOperation {
    generator = BillGenerationv3(procedures: procedure)
        batchPrinting = true
        if generator!.generateBills(pInfo: pInfo, cInfo: cInfo, view: self) {
            DispatchQueue.main.async { // Correct
            self.progressBar.progress = Float(count/uidPrecentage)
            self.title = "Batching Claims \(count)/\(uidPrecentage)...Please Wait"
            nextClaim()
        }                                
  }
}

Он отлично обновляет заголовок, но индикатор выполнения ничего не делает до конца. Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 05 марта 2019
let someInt: Int = 3
let someOtherInt: Int = 5

Это не будет работать

print(Float(someInt/someOtherInt))

//"0.0"

Это будет

print(Float(someInt)/Float(someOtherInt))

//"0.6"

Причина в том, что в первом сценарии вы инициализируете Float с результатом целочисленного деления , в результате которого результат округляется до целого числа по характеру операции.

Второй сценарий включает в себя явное деление двух чисел с плавающей запятой , поэтому результатом также будет число с плавающей запятой и обработка десятичных чисел.

1 голос
/ 05 марта 2019

Прежде всего, убедитесь, что ваши значения count и uidPrecentage возвращают правильные значения (согласно вашим оценкам), и исчисление равно 0 <= значение <= 1 </em>.

И последнее, но не менее важное: вы должны использовать метод класса представления прогресса setProgress(_ progress: Float, animated: Bool), чтобы обновить его, а не изменять непосредственно переменную.Как видно из официальной документации https://developer.apple.com/documentation/uikit/uiprogressview/1619846-setprogress,, вам даже бесплатно дадут анимацию прогресса, если вы захотите

...