重用“昂贵的” UIViewController

时间:2018-09-12 18:55:05

标签: ios uiviewcontroller uistoryboard avplayerviewcontroller

我正在将AVPlayerViewController(使用资源而言)嵌入UIViewController中(使用包容性)。我需要在导航堆栈中随后推送的视图控制器中使用另一个AVPlayerViewController,但是如果我可以将其从父级中删除并将其嵌入子级中,那将是很好的。当孩子弹出时,我想将其重新嵌入到父对象中。这样做的优雅方式是什么(代码或情节提要)?

2 个答案:

答案 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.
}
}

enter image description here