Автоматически закрывать AVPlayer после завершения видео со ВСЕХ ЭКРАНОВ - PullRequest
0 голосов
/ 26 декабря 2018

Когда мое видео завершится, я хочу, чтобы оно сняло AVPlayer и вернулось в контроллер основного вида.

Я также хочу снять видео с моего внешнего экрана / дисплея, когда оно подключено.

Как мне это сделать?

Я попробовал несколько разных ответов здесь, и пока ни один из них не сработал.

ПРИМЕЧАНИЕ: четыре - это название моего видео

@IBAction func fourVideoPlayButton(_ sender: Any) {

    if let path = Bundle.main.path(forResource: "Four", ofType: "mp4") {

        let fourVideo = AVPlayer(url: URL(fileURLWithPath: path))
        let fourVideoPlayer = AVPlayerViewController()
        fourVideoPlayer.player = fourVideo

        present(fourVideoPlayer, animated: true, completion: {
            fourVideo.play()
        })
    }
}

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

In Swift 4,2 ,

let fourPlayerController = AVPlayerViewController()

    @IBAction func fourVideoPlayButton(_ sender: Any) {
        guard let path = Bundle.main.path(forResource: "Four", ofType:"mp4") else {
            return
        }
        let fourVideoPlayer = AVPlayer(url: URL(fileURLWithPath: path))
        fourPlayerController.player = fourVideoPlayer
        NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: fourPlayerController.player?.currentItem)

        present(fourPlayerController, animated: true) {
            fourVideoPlayer.play()
        }
    }

    @objc func playerDidFinishPlaying(note: NSNotification) {
        fourPlayerController.dismiss(animated: true, completion: nil)
        fourPlayerController.dismiss(true, completion: nil)
        fourPlayerController.view.removeFromSuperview()
        self.presentedViewController?. dismiss(true, completion: nil)
    }
0 голосов
/ 26 декабря 2018

Вам нужно добавить наблюдателя, чтобы определить, когда игрок заканчивает играть,

NotificationCenter.default.addObserver(self, selector: Selector(("playerDidFinishPlaying:")), 
       name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: fourVideoPlayer.player.currentItem)

func playerDidFinishPlaying(note: NSNotification) {
    fourVideoPlayer.dismiss(animated: true, completion: nil)
}

Надеюсь, эта помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...