AVPlayerViewController выскакивает весь стек контроллеров представления при закрытии - PullRequest
0 голосов
/ 03 декабря 2018

Я использую 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)
...