在CTCallStateDisconnected上进行UI更改

时间:2016-05-12 00:28:40

标签: ios swift grand-central-dispatch core-telephony

使用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调用未在正确的线程上调用,这导致无法显示更改。

0 个答案:

没有答案