Offiziell gibt es keine Schaltfläche Fertig Click-Ereignis, ein Ingenieur von Apple sagte, darüber here.
Zu meiner Recherche habe ich herausgefunden, dass es eine, aber wirklich indirekte Möglichkeit gibt, ein Ereignis zu erhalten, wenn Done Button geklickt wurde.
Ich fand heraus, dass die einzige Variable von AVPlayerViewController, die geändert wird, wenn Sie auf Schaltfläche klicken, ist AVPlayerViewController.view.frame
. Zunächst erscheint view.frame in der Mitte des ViewControllers.
Wenn Sie es mit animated : true
präsentieren, geht es auf den Boden von ViewController und zurück in die Mitte. Wenn Sie fertig sind, geht es zurück nach unten.
Wenn Sie es mit animated : false
präsentieren, wird es nur 2 Änderungen: Frame wird in der Mitte von ViewController sein, wenn Sie mit der Wiedergabe von Video beginnen, und unten, wenn Fertig geklickt wird.
Also, wenn Sie Observer zu AVPlayerViewController.view.frame
in den Rückruf an present(PlayerViewController, animated : true)
hinzufügen, erhalten Sie nur einen Aufruf des Beobachters, rechts, wenn Sie auf Schaltfläche klicken und Video-Ansicht wird aus dem Bildschirm sein.
In meinem Fall wurde AVPlayerViewController modal mit Animation dargestellt. Code unten arbeitete für mich:
Swift 3,0
override func viewDidLoad()
{
super.viewDidLoad()
let videoURL = NSURL(fileURLWithPath:Bundle.main.path(forResource: "MyVideo", ofType:"mp4")!)
let player = AVPlayer(url: videoURL as URL)
present(playerViewController, animated: false) {() -> Void in
player.play()
self.playerViewController.player = player
self.playerViewController.addObserver(self, forKeyPath: #keyPath(UIViewController.view.frame), options: [.old, .new], context: nil)
}}
override func observeValue(forKeyPath keyPath: String?,
of object: Any?,
change: [NSKeyValueChangeKey : Any]?,
context: UnsafeMutableRawPointer?)
{
print(self.playerViewController.view.frame)
//Player view is out of the screen and
//You can do your custom actions
}
Auch fand ich heraus, wenn Sie auf Fertig klicken, wird AVPlayerViewController nicht entlassen und man kann es in ParentViewController.presentedViewController
sehen, so dass Sie nicht Beobachter hinzufügen dieser Eigenschaft kann
Sie zu beobachten, so viel Dank! @vmchar, rette meinen ganzen Tag! Kann nirgends die richtige Antwort finden, außer deins! – Jerome
haha Perfect –
Das hat ziemlich süß funktioniert, danke! – Jason