Затухание AVPlayerViewController по завершении

Я использую AVPlayerViewController, который я хочу исчезнуть, когда видео закончится ... Я могу зафиксировать событие конца видео, и код, собранный для AVPlayer, работает, но для AVPlayerViewController - нет.

self.playerItem = AVPlayerItem(URL: videoURL)
self.player = AVPlayer(playerItem: self.playerItem)
self.playerLayer = AVPlayerLayer(player: self.player)
self.streamPlayer =  AVPlayerViewController()
self.streamPlayer.player = self.player
self.streamPlayer.view.frame = CGRect(x: 128, y: 222, width: 512, height: 256)

Этот код тоже работает, но работает в полноэкранном режиме - мне не нужен полноэкранный режим ...

//self.presentViewController(self.streamPlayer, animated: true) {
//   self.streamPlayer.player!.play()
//}

Я использую это?

self.view.addSubview(self.streamPlayer.view)
self.streamPlayer.player!.play()

Запись события ..

override func viewWillAppear(animated: Bool) {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "finishedPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
}

Код события ...

func finishedPlaying (myNotification: NSNotification) {

    let fadeOut = CABasicAnimation(keyPath: "opacity")
    fadeOut.fromValue = 1.0
    fadeOut.toValue = 0.0
    fadeOut.duration = 8.0
    fadeOut.delegate = self
    fadeOut.setValue("video", forKey:"fadeOut")
    fadeOut.removedOnCompletion = false
    fadeOut.fillMode = kCAFillModeForwards

Эта строка ничего не делает с AVPlayerViewController / С AVPlayer она красиво затухает?

    playerLayer.addAnimation(fadeOut, forKey: nil)

Это просто удаляет AVPlayerViewController, план Б, если я не могу заставить эту работу!

    //self.streamPlayer.view.removeFromSuperview()
    print("VIDEO finished")
}

person user3069232    schedule 24.02.2016    source источник


Ответы (1)


AVPlayerViewController имеет собственный AVPlayerLayer и не знает о созданном вами AVPlayerLayer. Таким образом, строка playerLayer.addAnimation (fadeOut, forKey: nil) не действует. Вы должны установить или анимировать альфа-значение представления AVPlayerViewController. Для плавной анимации вы можете посмотреть методы + [UIView animateWithDuration: (...)] и вызвать self.streamPlayer.view.removeFromSuperview () в обработчике завершения.

person Felix    schedule 10.06.2016