我正在将AVPlayerViewController(使用资源而言)嵌入UIViewController中(使用包容性)。我需要在导航堆栈中随后推送的视图控制器中使用另一个AVPlayerViewController,但是如果我可以将其从父级中删除并将其嵌入子级中,那将是很好的。当孩子弹出时,我想将其重新嵌入到父对象中。这样做的优雅方式是什么(代码或情节提要)?
答案 0 :(得分:1)
您需要用代码来完成。创建您的“昂贵”视图控制器并使用强引用将其存储在某个地方。您可以在任何地方以编程方式显示它,然后可以将其关闭,但将通过强大的参考进行存储。稍后您可以再次显示它。
P.S。看来您的视图控制器具有AVPlayer,在这种情况下,您可能需要添加一些方法以在重用或离开暂停播放之前“擦除”其状态
答案 1 :(得分:0)
可以通过这种方式完成。您需要设置播放器。
import UIKit
import AVKit
class AVViewController: UIViewController {
static var player : AVPlayerViewController?
@IBOutlet var containerView: UIView!
override func viewWillAppear(_ animated: Bool) {
DispatchQueue.main.async {
self.addChildViewController(AVViewController.player!)
self.containerView.addSubview((AVViewController.player?.view)!)
// setup player here.
}
super.viewWillAppear(animated)
}
override func viewDidLoad() {
super.viewDidLoad()
for vc in self.childViewControllers{
if let vc = vc as? AVPlayerViewController, AVViewController.player == nil {
AVViewController.player = vc
}
}
// Do any additional setup after loading the view.
}
}