代码之家  ›  专栏  ›  技术社区  ›  Xin Lok

添加进度条-Swift

  •  0
  • Xin Lok  · 技术社区  · 6 年前

    我有一个函数叫做 HelpersFunctions 做所有的计算。 doCalculation 负责计算。

    因此,我将以下通知添加到 计算 具体如下:

    NotificationCenter.default.post(name: .return_progress, object: self)
    for i in 1...n1 {
     //Do all the calculation
    }
    

    所以,一旦我够到 NotificationCenter.default.post ,它将移动到名为 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) %)")
    
    }
    

    所以,首先我把所有需要的数据放在 创建新元素vc ,然后有一个名为run的按钮来执行所有计算,然后它将移动到另一个 TableViewController 所有的结果。

    所以当我在里面的时候 ,将显示进度条。

    container_elementProperty (UIview) 刚计算完就出现了,这使得进度条毫无用处。

    container_elementProperty UIView 被人看见?

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

    enter image description here

    与此问题相关的警告是: UIView.addSubview(_:) must be used from main thread only

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

    0 回复  |  直到 6 年前
        1
  •  2
  •   Maysam    6 年前
    • 要模拟进程,例如网络请求,您不能简单地执行 for 在主线程中循环,您应该使用 GCD .
    • 更新正在进行的操作使用的进度 Delegation KVO .
    • 使用全局变量会使代码有缺陷,请避免!

    这是一个 working version 你的密码。

    enter image description here