我有一个按钮,在点击时会做一些数学运算。 根据用户输入的等式,按钮将被点击,但随后停留,因为应用程序需要一段时间才能在按钮的功能中进行数学运算。如果我可以在那段时间内向用户显示进度条,那就太好了。我添加了一个,但问题是当按钮被点击时它没有显示,因为按钮滞后..似乎在按钮被轻敲和滞后时屏幕上不会发生任何变化。
抱歉......我有点像菜鸟......但我被困了......
答案 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)
我会在加载时添加进度条但将其设置为不可见,然后将其设置为可见按钮按下方法的第一个动作,然后在后台进行所有数学运算。