0

我有一个带有按钮的初始屏幕,当您按下它时,就会播放视频。然后,一旦电影结束,我希望视频关闭并转到另一个屏幕。目前我可以让按钮播放视频,然后在视频结束时关闭视频,但它会返回到初始屏幕。可以帮忙吗?我在下面粘贴了我的代码。

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {
let playerViewController = AVPlayerViewController()

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func playButton(_ sender: AnyObject) {

    let movieURL = Bundle.main.url(forResource: "video", withExtension: "mp4")!
    let player = AVPlayer(url: movieURL as URL)

    playerViewController.player = player
    NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerViewController.player?.currentItem)

    self.present(playerViewController, animated: true) {
        self.playerViewController.player!.play()
    }
}


@objc func playerDidFinishPlaying(note: NSNotification) {
        self.playerViewController.dismiss(animated: true)
       }
}
4

1 回答 1

1

“完成”是什么意思?

这是否意味着视频已结束或用户关闭视图控制器或其他?

当视频结束时,您需要使用 NotificationCenter

func playVideo(url: URL) {
  let playerItem = AVPlayerItem(asset: AVURLAsset(url: someVideoUrl))
  NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidPlayToEndTime), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerItem)
  self.player.replaceCurrentItem(with: playerItem)
  self.player.play()
}

func playerItemDidPlayToEndTime() {
  // load next video or something
}

当用户关闭 AVPlayerViewController 时,

你可以检查AVPlayerViewControllerDelegate,它有几种方法可以满足你的需要

于 2020-04-19T11:13:09.363 回答