从前台导航到后台时如何暂停和播放背景视频?

How do I pause and play background video when navigating from foreground to background?

我在启动我的应用程序时播放背景视频。如果我碰巧按下主页按钮,我希望视频暂停并从中断处继续播放。这是我的代码:

class ViewController: UIViewController
{
    let moviePlayerController = AVPlayerViewController()
    var aPlayer = AVPlayer()
    func playBackgroundMovie()
    {
        if let url = NSBundle.mainBundle().URLForResource("IMG_0489", withExtension: "m4v")
        {
            aPlayer = AVPlayer(URL: url)
        }
        moviePlayerController.player = aPlayer
        moviePlayerController.view.frame = view.frame
        moviePlayerController.view.sizeToFit()
        moviePlayerController.videoGravity = AVLayerVideoGravityResizeAspect
        moviePlayerController.showsPlaybackControls = false
        aPlayer.play()
        view.insertSubview(moviePlayerController.view, atIndex: 0)
    }

    func didPlayToEndTime()
    {
        aPlayer.seekToTime(CMTimeMakeWithSeconds(0, 1))
        aPlayer.play()
    }


    override func viewDidLoad()
    {
        // Do any additional setup after loading the view, typically from a nib.
        super.viewDidLoad()
        playBackgroundMovie()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.didPlayToEndTime), name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)
    }

我必须在应用委托中执行某些操作吗?我看了以前的视频,但我认为其中一些视频使用的是 swift 的过时版本。或者对我来说有点太混乱了。

是的,所有特定于应用程序的操作都发生在您的 appdelegate 协议中。将暂停代码放入 appdelegate 的 applicationDidEnterBackground 函数中,并将恢复代码放入 applicationWillEnterForeground.

I would check out Apple's docs on the AppDelegate protocol,尤其是这两个函数,因为在您的应用程序变为非活动状态之前,您需要多长时间才能完成任务(尽管如果您只是暂停和恢复 AVPlayer 你应该没问题)。

您应该能够通过 NSNotificationCenter 注册一个 backgrounding/foregrounding 通知来播放或暂停您的 aPlayer,如下所示:

let notificationCenter = NSNotificationCenter.defaultCenter()
    notificationCenter.addObserver(self, selector: #selector(pauseVideoForBackgrounding), name: UIApplicationDidEnterBackgroundNotification, object: nil)

有几个 UIApplication 通知名称可用,包括 UIApplicationWillEnterForegroundNotification。您可以根据需要利用尽可能多的通知,让您的视频播放器 class 知道应用程序状态发生了什么。

如果您支持 iOS 8 或更低版本,请确保同时从您添加到视图控制器的任何 NSNotifications 中删除您的播放器 class 作为观察者。