Я использую AVPlayerViewController для отображения видео контента в моем приложении.Этот игрок может быть достигнут через последовательность просмотров.Последовательность встроена в контроллер вида навигации.Проблема у меня заключается в том, что всякий раз, когда я закрываю плеер, весь стек контроллеров представления извлекается из списка контроллеров представления в контроллере навигации, что означает, что я возвращаюсь на свой домашний экран (однако я хочу вывести AVPlayerViewController только изсписок и вернуться на экран раньше).Я пытался найти способ переопределить кнопку закрытия, но не нашел пути.Более того, я попытался выдвинуть уведомление и обработать его на главном экране, повторно инициализировав весь стек контроллеров представления - это решение работает, но не похоже на соответствующее решение.Я прикрепил класс, который наследуется от AVPlayerViewController, и код, который реализует viewController.Благодарю за любую подсказку.
import UIKit
import AVKit
import AVFoundation
// MARK: - EduMediaVideoViewController
class EduMediaVideoViewController: AVPlayerViewController, EduMediaViewController {
// MARK: Stored Type Properties
weak var eduMediaDelegate: EduMediaElementDelegate?
var videoMedia: VideoMediaElement?
// MARK: Lifecycle Methods
override func viewDidLoad() {
super.viewDidLoad()
setUpVideo()
}
// MARK: Instance Methods
func setContent(content: MediaElement) {
guard let videoMedia = content as? VideoMediaElement else {
return
}
self.videoMedia = videoMedia
}
// MARK: Private Instance Methods
private func setUpVideo() {
let playerItem = videoMedia?.video
let player = AVPlayer(playerItem: playerItem)
self.player = player
player.play()
}
private func updateVideoProgress() {
self.eduMediaDelegate?.updateProgress(id: 1, progress: 1)
}
}
// create an extension of AVPlayerViewController
extension EduMediaVideoViewController {
// override 'viewWillDisappear'
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
guard let category = eduMediaDelegate?.getCategory() else {
return
}
let dict = ["category": category]
NotificationCenter.default.post(name: .kAVDismissNotification, object: nil, userInfo: dict)
}
}
extension Notification.Name {
static let kAVDismissNotification = Notification.Name.init("dismissing")
}
Код, который инициализирует видеоконтроллер:
let eduVideoViewController = EduMediaVideoViewController()
eduVideoViewController.setContent(content: mediaElement)
eduVideoViewController.eduMediaDelegate = self
navigationController?.pushViewController(eduVideoViewController, animated: false)