重用'昂贵的'UIViewController

问题描述 投票:0回答:2

我在UIViewController中嵌入一个AVPlayerViewController(在资源方面很昂贵)(使用包含)。我需要在导航堆栈中随后推送的视图控制器中使用另一个AVPlayerViewController,但如果我可以将其从父项中删除并将其嵌入到子项中,那将会很好。当孩子弹出时,我想把它嵌回到父母中。这样做的优雅方式是什么(代码或故事板)?

ios uiviewcontroller uistoryboard avplayerviewcontroller
2个回答
1
投票

你需要在代码中完成它。创建“昂贵的”视图控制器并使用强引用将其存储在某处。您可以在任何地方以编程方式显示它,然后您可以将其关闭,但它将通过强大的参考存储。之后你可以再次展示它。

附:看起来你的视图控制器有AVPlayer,在这种情况下你可能需要添加一些方法来“重用”其状态,然后再使用或者在休假暂停播放时


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

© www.soinside.com 2019 - 2024. All rights reserved.