删除AVPlayerViewController和观察者似乎没有工作

时间:2018-03-01 21:05:30

标签: swift avplayer nsnotificationcenter avplayerviewcontroller

以下是我在自定义视图中创建AVPlayerViewController的方法:

private func configureAVPlayer(completion: @escaping () -> ()) {
  DispatchQueue.global(qos: .background).async {
    self.avPlayer = AVPlayer()
    self.avPlayerController = AVPlayerViewController()

    guard self.avPlayer != nil && self.avPlayerController != nil else {
        return
    }

        self.avPlayerController!.showsPlaybackControls = false
        self.avPlayerController!.player = self.avPlayer!
        self.avPlayerController!.videoGravity = AVLayerVideoGravity.resizeAspectFill.rawValue
        self.avPlayerController!.view.clipsToBounds = true
        self.avPlayerController!.view.layer.cornerRadius = 10.0

        DispatchQueue.main.async(execute: {
            self.avPlayerController!.view.frame = self.imageView.frame

            self.mediaView.addSubview(self.avPlayerController!.view)
            self.mediaView.sendSubview(toBack: self.avPlayerController!.view)

            self.parentController.addChildViewController(self.avPlayerController!)


            NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.avPlayer!.currentItem, queue: .main) { _ in
                print("Replaying")

                self.avPlayer?.seek(to: kCMTimeZero)
                self.avPlayer?.play()
            }

            completion()
        })
    }
}

当我的视图消失时,我想删除我的AVPlayerViewController及其观察者,所以我使用:

    override func removeFromSuperview() {
        avPlayerController?.player?.pause()
        avPlayerController?.view.removeFromSuperview()
        avPlayerController?.removeFromParentViewController()
        avPlayerController = nil

        NotificationCenter.default.removeObserver(self, name: .AVPlayerItemDidPlayToEndTime, object: self.avPlayer!.currentItem)

    }

但是,下次我创建此视图并调用configureAVPlayer时,我的观察者的完成会被调用两次,我会听到两次视频的音频,也就是两次视频播放。

我没有正确移除观察者吗?

0 个答案:

没有答案