繁体   English   中英

使用CallKit接听电话时如何显示ViewController

[英]How to display a ViewController when answering a call with CallKit

我已按照以下教程在我的应用程序中实现CallKit:

https://www.raywenderlich.com/150015/callkit-tutorial-ios

但是我想走得更远,并在调用处于活动状态时显示我自己的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传递给它,其中Push通知正在执行委托的reportIncomingCall()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM