Повторное использование «дорогого» UIViewController - PullRequest
0 голосов
/ 12 сентября 2018

Я встраиваю AVPlayerViewController (который является дорогим с точки зрения ресурсов) в UIViewController (используя сдерживание).Мне нужно использовать другой AVPlayerViewController в последующем выдвинутом контроллере представления в стеке навигации, но было бы хорошо, если бы я мог удалить его из родительского элемента и внедрить его в дочерний элемент.Когда ребенок появляется, я хочу вставить его обратно в родительский.Каков элегантный способ сделать это (код или раскадровки)?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вы должны сделать это в коде. Создайте свой «дорогой» контроллер представления и сохраните его где-нибудь, используя надежную ссылку. Вы можете показать это программно где угодно, затем вы можете отклонить его, но он будет храниться по сильной ссылке. Позже вы можете показать это снова.

P.S. Похоже, вы просматриваете контроллер с AVPlayer, в этом случае, вероятно, вам нужно добавить какой-либо метод, чтобы «стереть» его состояние перед повторным использованием или при воспроизведении с паузой при выходе

0 голосов
/ 12 сентября 2018

Это можно сделать так.Вам необходимо настроить плеер.

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

...