我想向TableViewController添加进度条。
我有一个名为HelpersFunctions
的函数来完成所有的计算。
函数doCalculation
负责计算。
因此,我将以下通知添加到doCalculation
中,如下所示:
NotificationCenter.default.post(name: .return_progress, object: self)
for i in 1...n1 {
//Do all the calculation
}
因此,一旦我到达
NotificationCenter.default.post
时,它将移动到名为CreateNewElementVC
的TableView控制器。现在,在
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,可以在此link上检查示例项目。
感谢任何支持。
最佳答案
要模拟一个进程,例如网络请求,您不能简单地在主线程中执行for
循环,应该使用GCD
。
要更新正在进行的操作的进度,请使用Delegation,而不是KVO。
使用全局变量会使代码有缺陷,请避免!
这是您的代码。
working version
关于swift - 添加进度条 - Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55075254/