gpt4 book ai didi

swift - 添加进度条 - Swift

转载 作者:可可西里 更新时间:2023-11-01 01:07:27 29 4
gpt4 key购买 nike

我想给 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所有的结果。

因此,当我在函数 doCalculation 中时,应该会出现进度条。

实际上,进度条container_elementProperty(UIview)是在计算完成后才出现的,导致进度条没有用。

知道如何让名为 container_elementProperty UIView 的 View 可见吗?

我已经接近解决这个问题,因为我可以看到堆栈中的进度如下图所示,我只想在完成计算之前在屏幕上显示它。

enter image description here

为什么我无法在进行计算时将 View 显示在屏幕上,因为您可以看到第 2 步先运行了。与此问题相关的警告是:UIView.addSubview(_:) must be used from main thread only

可以在此 link 上检查示例项目在 github。感谢任何形式的支持。

最佳答案

  • 要模拟一个进程,例如网络请求,您不能简单地在主线程中执行 for 循环,您应该使用 GCD
  • 要更新正在进行的操作的进度,请使用 Delegation , 不是 KVO .
  • 使用全局变量会使您的代码有缺陷,请避免使用它!

这是一个 working version你的代码。

enter image description here

关于swift - 添加进度条 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55075254/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com