在调用其他函数之前更新UIView?

时间:2017-01-29 00:39:06

标签: ios swift user-interface closures

我在Swift工作。当用户按下UIButton时,它会调用ButtonPressed()函数。我希望ButtonPressed()做两件事:

  1. 通过删除当前按钮和文本,然后上传一些新文本来更新UIView。
  2. 调用函数TimeConsumingCalculation()。 TimeConsumingCalculation是我的应用程序的复杂部分,并进行一些大约需要20秒左右才能完成的计算。
  3. 现在,我有基本顺序的代码:

    ButtonPressed(){
    self.Button.removeFromSuperview()
    TimeConsumingCalculation()
    }
    

    但是,在TimeConsumingCalculation完成之前,它不会删除按钮或执行任何其他UI更新或添加。我已阅读并尝试了一些关于闭包和异步函数的指南,但没有运气。是否有一个特殊属性与UIView导致它最后更新?

    作为旁注 - 我已经尝试将所有UI操作放在一个单独的函数中并首先调用它。它不起作用。耗时的功能不会从按钮或UI或类似的东西中获取任何变量。

    谢谢!

1 个答案:

答案 0 :(得分:1)

似乎timeConsumingCalculation()正在阻止主队列,后者负责UI更新。尝试这样调用它,并使用isHidden属性隐藏按钮,而不是完全从视图中删除它。

ButtonPressed(){
   self.Button.isHidden = true
   DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {
      self.timeConsumingCalculation()
   }
}

这里你在后台线程上异步调用timeConsumingCalculation()。我们提供的服务质量为userInitiated,详细了解服务质量等级here