按下按钮时如何更改界面

时间:2017-01-08 02:53:52

标签: ios swift3

我有一个按钮,在点击时会做一些数学运算。 根据用户输入的等式,按钮将被点击,但随后停留,因为应用程序需要一段时间才能在按钮的功能中进行数学运算。如果我可以在那段时间内向用户显示进度条,那就太好了。我添加了一个,但问题是当按钮被点击时它没有显示,因为按钮滞后..似乎在按钮被轻敲和滞后时屏幕上不会发生任何变化。

抱歉......我有点像菜鸟......但我被困了......

3 个答案:

答案 0 :(得分:1)

您应该在后台线程中进行数学运算,并在主线程中使用所有与UI相关的代码。例如,在Swift 3中:

// Main thread by default: 
// show progress bar here.

DispatchQueue.global(qos: .background).async {
    // Background thread:
    // start your heavy process here, for example: 
    for index in 1...1000 {
        // do something in the loop

        DispatchQueue.main.async {
            // Main thread:
            // update your progress bar here
        }
    }

    DispatchQueue.main.async {
        // Main thread, called after the previous code:
        // hide your progress bar here
    }
}

答案 1 :(得分:0)

GCD。这是一个基本用法:

@IBAction func buttonPressed(sender: AnyObject)
{
   // show progress bar  
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
               //  start you main calculation 

        dispatch_async(dispatch_get_main_queue()) {
            // hide your progress bar
        }
    }
}

dispatch_async函数异步运行给定队列上的代码块。在第一次dispatch_async调用中,我们调度代码以在后台队列上运行。在我们得到结果后,我们用该结果更新主队列上的标签

答案 2 :(得分:-3)

我会在加载时添加进度条但将其设置为不可见,然后将其设置为可见按钮按下方法的第一个动作,然后在后台进行所有数学运算。