使用CoreTelephony时,如何在应用程序从电话呼叫返回后更改UI?
我有以下内容:
@IBAction func callNumber(sender: CallButton) {
callCenter?.callEventHandler = { (call: CTCall) -> () in
if call.callState == "CTCallStateDisconnected" {
self.presentModalView
dispatch_async(dispatch_get_main_queue(), {
self.handleModalStyling()
})
}
}
sender.callContact()
}
private func handleModalStyling() {
self.view.layer.opacity = 0.4
self.navigationController?.navigationBar.layer.opacity = 0.4
self.navigationItem.leftBarButtonItem?.enabled = false
self.navigationItem.rightBarButtonItem?.enabled = false
}
模态视图肯定会按预期显示,但不会发生关联的不透明度更改。请注意,handleModalStyling
内正在调用presentModalView
。
编辑:
我找到了解决方案。如果将来有人遇到这种情况,CTCallCenter.callEventHandler
将在高优先级线程上运行,不是主线程。这意味着handleStyling
方法中的displayModalView
调用未在正确的线程上调用,这导致无法显示更改。