您如何让视频在播放完毕后消失,以便用户可以继续使用该应用程序?

How do you make a video disappear after it finishes playing so the user could continue using the app?

我写了一些代码在启动后播放视频,但是视频播放后,它不会返回故事板,它只是卡在这个循环中,然后返回主板一秒钟变黑(可能是视频结束)

在调试控制台中显示“2019-05-05 01:32:33.766132+0800 app[35989:1028569] [AVKit] 当全屏视图控制器正在运行时,目标视图应该是我们自己的视图转换!"

我尝试过一些东西,比如让一些东西可以感知视频的结尾,但这些都没有帮助。

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        playVideo()
    }

    let playerController = AVPlayerViewController()

    private func playVideo() {
        guard let path = Bundle.main.path(forResource: "video", ofType:"m4v") else {
            debugPrint("video.m4v not found")
            return
        }
        let player = AVPlayer(url: URL(fileURLWithPath: path))
        playerController.player = player
        NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerController.player?.currentItem)
        playerController.showsPlaybackControls = false

        present(playerController, animated: true) {
            player.play()
        }
    }

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

我希望视频在播放完毕后消失,以便用户可以看到应用程序的主屏幕。

这就是问题所在

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    playVideo()
}

playerVC 被关闭,之后 vc 出现并调用 viewDidAppear 所以它会再次显示播放器,考虑一次 bool

var once = true
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if once {
      playVideo()
      once = false
    }
}

或者在viewDidLoad

中用DispatchAfter显示