我在UIViewController中嵌入一个AVPlayerViewController(在资源方面很昂贵)(使用包含)。我需要在导航堆栈中随后推送的视图控制器中使用另一个AVPlayerViewController,但如果我可以将其从父项中删除并将其嵌入到子项中,那将会很好。当孩子弹出时,我想把它嵌回到父母中。这样做的优雅方式是什么(代码或故事板)?
你需要在代码中完成它。创建“昂贵的”视图控制器并使用强引用将其存储在某处。您可以在任何地方以编程方式显示它,然后您可以将其关闭,但它将通过强大的参考存储。之后你可以再次展示它。
附:看起来你的视图控制器有AVPlayer,在这种情况下你可能需要添加一些方法来“重用”其状态,然后再使用或者在休假暂停播放时
它可以这样做。你需要设置播放器。
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.
}
}