我已遵循以下教程在我的应用程序中实现CallKit:
https://www.raywenderlich.com/150015/callkit-tutorial-ios
但是我想走得更远,并在调用处于 Activity 状态时显示我自己的ViewController。我正在做视频通话服务,所以我想拥有自己的界面。
那有可能吗?我一直在尝试从provider(CXProvider:CXAnswerCallAction)
方法启动ViewController,该方法是用户接听电话时调用的方法,但每次似乎都崩溃了。我正在尝试使用此实例化它(Swift 3):
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "VideoCallViewController") as! VideoCallViewController
UIApplication.shared.keyWindow?.rootViewController?.present(vc, animated: true, completion: nil)
它在第二行崩溃,没有任何解释。它显示了
lldb
,我试图通过输入bt
来获取回溯,但它不返回任何内容。 最佳答案
我想到了:
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = mainStoryboard.instantiateViewController(withIdentifier: "VideoCallViewController") as! VideoCallViewController
然后,要么:
vc.view.frame = UIScreen.main.bounds
UIView.transition(with: self.window!, duration: 0.5, options: .transitionCrossDissolve, animations: {
self.window!.rootViewController = vc
}, completion: nil)
要么:
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
根据https://stackoverflow.com/a/35226874/5798668,第一个选项是可取的,因为如果使用第二个选项,则您的应用程序将同时激活多个UIWindows。
注意:在我的情况下,
ProviderDelegate
没有self.window
属性,该属性由AppDelegate.swift
传递给它,在其中推送通知正在执行委托的reportIncomingCall()
。关于ios - 使用CallKit接听电话时如何显示ViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44590971/