Я хочу добавить индикатор выполнения в tableViewController.
У меня есть одна функция с именем HelpersFunctions
, которая выполняет все вычисления.
Функция doCalculation
отвечает за расчет.
Итак, я добавляю следующее уведомление к doCalculation
следующим образом:
NotificationCenter.default.post(name: .return_progress, object: self)
for i in 1...n1 {
//Do all the calculation
}
Итак, как только я достигну NotificationCenter.default.post
, он перейдет к контроллеру Tableview с именем CreateNewElementVC
Теперь внутри ViewDidLoad
я добавил следующую строку:
//progress
NotificationCenter.default.addObserver(self, selector: #selector(showProgress), name: .return_progress, object: nil)
В тот же файл swift я добавил следующее:
let container_elementProperty: ProgressBarView = {
let view = ProgressBarView()
view.backgroundColor = UIColor(white: 0, alpha: 0.5)
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
@objc func showProgress() {
if(progressCounter > 1.0){timer.invalidate()}
print("Step 1")
container_elementProperty.frame = CGRect(x: 100, y: 100, width: 200, height: 200)
container_elementProperty.backgroundColor = UIColor(white: 0, alpha: 0.5)
container_elementProperty.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleDismiss)))
let queue = DispatchQueue(label: "queue1", qos: .userInteractive)
queue.async {
print("Step 2")
self.view.addSubview(self.container_elementProperty)
}
//view.addSubview(container_elementProperty)
print("Step 3")
container_elementProperty.progress = progressCounter
progressCounter = progressCounter + progressIncrement
let x1: Float = Float(start_Counting)
let x2: Float = Float(End_Counting)
let xx: Float = x1 / x2 * 100
print("Start at: \(xx) %)")
}
Итак, сначала я помещаю все необходимые данные в CreateNewElementVC
, затем есть кнопка с именем run, чтобы выполнить все вычисления, а затем она переместится на другой TableViewController
со всем результатом.
Поэтому, пока я нахожусь внутри функции doCalculation
, должен появиться индикатор выполнения.
На самом деле индикатор выполнения container_elementProperty (UIview)
появился сразу после завершения расчета, что делает индикатор выполнения бесполезным.
Есть идеи, как сделать так, чтобы вид с именем container_elementProperty UIView
был виден?
Я близок к решению этой проблемы, так как я вижу прогресс в стеке, как показано на рисунке ниже, я просто хочу показать это на экране перед завершением расчета.
Почему я не могу вывести вид на экран во время вычисления, как вы можете видеть, что шаг 2 выполнялся первым.
Предупреждение, связанное с этой проблемой: UIView.addSubview(_:) must be used from main thread only
.
Пример проекта можно проверить по этой ссылке на github.
Цени любую поддержку.