Повторное использование "дорогого" UIViewController
Я встраиваю AVPlayerViewController(который является дорогим с точки зрения ресурсов) в UIViewController (используя сдерживание). Мне нужно использовать другой AVPlayerViewController в последующем выдвинутом контроллере представления в стеке навигации, но было бы хорошо, если бы я мог удалить его из родительского элемента и внедрить его в дочерний элемент. Когда ребенок появляется, я хочу вставить его обратно в родительский. Каков элегантный способ сделать это (код или раскадровки)?
2 ответа
Вы должны сделать это в коде. Создайте свой "дорогой" контроллер представления и сохраните его где-нибудь с помощью надежной ссылки. Вы можете показать это программно где угодно, затем вы можете отклонить его, но он будет храниться по сильной ссылке. Позже вы можете показать это снова.
PS Похоже, что вы просматриваете контроллер с 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.
}
}