我在Swift工作。当用户按下UIButton时,它会调用ButtonPressed()函数。我希望ButtonPressed()做两件事:
现在,我有基本顺序的代码:
ButtonPressed(){
self.Button.removeFromSuperview()
TimeConsumingCalculation()
}
但是,在TimeConsumingCalculation完成之前,它不会删除按钮或执行任何其他UI更新或添加。我已阅读并尝试了一些关于闭包和异步函数的指南,但没有运气。是否有一个特殊属性与UIView导致它最后更新?
作为旁注 - 我已经尝试将所有UI操作放在一个单独的函数中并首先调用它。它不起作用。耗时的功能不会从按钮或UI或类似的东西中获取任何变量。
谢谢!
答案 0 :(得分:1)
似乎timeConsumingCalculation()
正在阻止主队列,后者负责UI更新。尝试这样调用它,并使用isHidden
属性隐藏按钮,而不是完全从视图中删除它。
ButtonPressed(){
self.Button.isHidden = true
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {
self.timeConsumingCalculation()
}
}
这里你在后台线程上异步调用timeConsumingCalculation()
。我们提供的服务质量为userInitiated
,详细了解服务质量等级here