2016-11-22 1 views
0

Ich habe eine Tableviewcontroller und ich Videos auf dieser Tabelle durch Taste in Zelle Antippen von AVPlayer von CodeSwift, wie man Ereignisknopf erhält, knöpfen während des Spiels das Video auf AVPlayer?

@IBAction func btnFullScreen(sender: AnyObject) {  
    let playController = AVPlayerViewController() 
    self.presentViewController(playController, animated: true, completion: nil) 
    playController.player?.play() 
} 

So zu spielen, es wird das Video im Vollbildmodus spielen und gibt es auch mit done Taste oben links. Ich möchte Ereignis Knopf erhalten, nach dem Klick auf getan Knopf wird es die aktuelle Zeit des Spielers bekommen, um etwas anderes zu tun. aber, wie man den Knopf des Ereignisknopfes erhält, done?

Antwort

1

Derzeit ist es nicht möglich ist, dass Sie auf die Schaltfläche Fertig von AVPlayerController abfangen können, ein Fehlerbericht für den mit Radar vorgelegt: 27047358

Sie nur einen Beobachter für AVPlayerItemDidPlayToEndTimeNotification hinzufügen kann, die gefeuert werden wenn dein Gegenstand fertig gespielt wurde.

auch nach der Dokumentation:

Sie AVPlayerViewController nicht Unterklasse. Das Überschreiben der Methoden dieser Klasse wird nicht unterstützt und führt zu undefiniertem Verhalten.

Referenz - here

+0

danken für beantworten, können Sie Code für Ihre Antwort aktualisieren ?. weil ich versuche, PlayerItemDIdReachEnd zu verwenden, aber es gibt keine Option oder Namen auf Swift 2.2 –

+0

Sorry, können Sie versuchen, AVPlayerItemDidPlayToEndTimeNotification – Rajat

+0

Diese Option kann nicht gesteuert werden, wenn die Schaltfläche getan wurde angezapft. es kontrolliert nur, wenn das Video voll mit der Videolänge abgespielt wurde. :( –

0

ich diesen Trick bin mit, es funktioniert mein Szenario auf, aber es kann Ihnen einen Hinweis geben:

Schritt eins:

Beobachter add on a View-Controller, den Sie von Ihrem Player-View-Controller präsentieren möchten, um benachrichtigt zu werden, wenn sich der Frame ändert:

self.playerViewController.addObserver(self, forKeyPath: #keyPath(MyViewController.view.frame), options: .new, context: nil) 
NotificationCenter.default.addObserver(self, selector: #selector(self.playerDidFinishPlaying), 
               name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerViewController.player!.currentItem) 

Zweiter Schritt:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if (keyPath == #keyPath(MyViewController.view.frame)){ 

     if playerViewController.player?.rate == 0{ 
      doneClicked() 
     } 
    } 
} 

Schritt drei:

func doneClicked(){ 

    self.playerViewController.player!.pause() 
    self.playerViewController.player!.rate = 0.0 
    self.playerViewController.player = nil 
    self.playerViewController.removeObserver(self, forKeyPath: #keyPath(HomeTabViewController.view.frame)) 
    NotificationCenter.default.removeObserver(self) 
    self.playerViewController.dismiss(animated: false, completion: nil) 
} 
Verwandte Themen