我想将进度条添加到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 Controller
现在,在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
。 / p>
因此,当我在函数doCalculation
中时,进度条应该会出现。
实际上,进度栏container_elementProperty (UIview)
刚在计算完成后出现,这使进度栏无用。
有什么主意如何让名为container_elementProperty UIView
的View可见?
我即将解决此问题,因为我可以看到堆栈中的进度,如下图所示,我只想在完成计算之前在屏幕上显示它。
为什么在执行计算时无法将视图显示在屏幕上,因为您可以看到首先执行了步骤2。
与该问题相关的警告是:UIView.addSubview(_:) must be used from main thread only
。
可以在github上的link上检查示例项目。 感谢任何支持。
答案 0 :(得分:2)
for
循环,则应使用GCD
。这是您代码的working version。
答案 1 :(得分:0)
# Write By Tushar on 11/02/2021#
import UIKit
class ViewController: UIViewController {
let totalValue:Float = 80.0
var firstNumber:Int? = 0
@IBOutlet weak var progressBar: UIProgressView!
override func viewDidLoad() {
super.viewDidLoad()
progressBar.trackTintColor = .white
progressBar.tintColor = .red
// Do any additional setup after loading the view.
progressBar.setProgress(0.0, animated: false)
}
func setProgress(firstValue:Float){
let processValue = firstValue/totalValue
progressBar.setProgress(processValue, animated: true)
}
@IBAction func btnResetClick(_ sender: UIButton) {
print("Reset Button Clicked")
firstNumber = 0
progressBar.setProgress(0.0, animated: false)
}
@IBAction func btnShowProgressClick(_ sender: UIButton) {
guard let presentValue = firstNumber else { return }
let newValue = presentValue + 1
firstNumber = newValue
setProgress(firstValue: Float(firstNumber!))
}
}