如何在使用 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
来获取回溯,但它没有 return 任何东西。
我想通了:
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()
根据 ,第一个选项更可取,因为如果您使用第二个选项,您的应用程序中将同时激活多个 UIWindows。
注意:在我的例子中,ProviderDelegate
没有 self.window
属性,这是由 AppDelegate.swift
传递给它的,其中推送通知正在执行 [=代表的 16=]。
我已按照以下教程在我的应用程序中实施 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
来获取回溯,但它没有 return 任何东西。
我想通了:
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()
根据
注意:在我的例子中,ProviderDelegate
没有 self.window
属性,这是由 AppDelegate.swift
传递给它的,其中推送通知正在执行 [=代表的 16=]。