Как сделать видео l oop в Xcode swift 5? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь получить фоновое видео в своем приложении, и я написал следующий код. Он запускается один раз, а затем останавливается. Как заставить видео повторяться вечно? Заранее спасибо.

@IBOutlet weak var videoLayer: UIView!
override func viewDidLoad() {
    super.viewDidLoad()
    playBackgroundVideo()
}
func playBackgroundVideo(){
   guard let path = Bundle.main.path(forResource: "City", ofType: "MOV") else {
       return
   }
   let player = AVPlayer(url: URL(fileURLWithPath: path))
   let playerLayer = AVPlayerLayer(player: player)
   playerLayer.frame = self.view.bounds
   playerLayer.videoGravity = .resizeAspectFill
   self.videoLayer.layer.addSublayer(playerLayer)
   player.play()
}

@objc func playerItemDidReachEnd(notification: Notification) {
        let p: AVPlayerItem = notification.object as! AVPlayerItem
    p.seek(to: .zero)
    }


}

1 Ответ

0 голосов
/ 22 апреля 2020

Попробуйте добавить notification прослушиватель для запуска кода playerItemDidReachEnd.
Вы делаете это, подключив NotificationCenter.default.addObserver в настройку.

Не проверял ваш код, но вы хотите настроить как этот пример:

@IBOutlet weak var videoLayer: UIView!

var player: AVPlayer!

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

func playBackgroundVideo()
{
    guard let path = Bundle.main.path(forResource: "City", ofType: "MOV") else{ return }

    player = AVPlayer(url: URL(fileURLWithPath: path))
    let playerLayer = AVPlayerLayer(player: player)

    //# add a Listener 
    NotificationCenter.default.addObserver( self,
                                            selector: #selector(playerItemDidReachEnd),
                                            name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
                                            object: nil)

    playerLayer.frame = self.view.bounds
    playerLayer.videoGravity = .resizeAspectFill
    self.videoLayer.layer.addSublayer(playerLayer)
    player.play()
}

@objc func playerItemDidReachEnd(notification: Notification) 
{
    player.seek(to: CMTime.zero)
    player.play()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...