2016-11-22 24 views
0

我有一個TableViewController我通過點擊內部單元格按鈕的代碼Swift,在播放AVPlayer上的視頻時如何獲得事件點擊完成按鈕?

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

因此,通過AVPlayer播放播放視頻上表,將全屏播放視頻,同時還與存在完成按鈕在左上角。我想事件完成按鈕,點擊完成按鈕後,它會得到玩家的當前時間做更多別的東西。 但如何獲取事件點擊完成按鈕?

回答

1

目前,它是不可能的,你可以攔截AVPlayerController的完成按鈕,一個Bug報告提交本與雷達:27047358

只能添加一個觀察員AVPlayerItemDidPlayToEndTimeNotification將被解僱當你的項目完成播放。

而且根據文檔:

不要繼承AVPlayerViewController。重寫這個類的 方法是不支持的,並導致不確定的行爲。

參考 - here

+0

感謝的回答,您可以更新到你的答案代碼?因爲我嘗試使用PlayerItemDIdReachEnd,但沒有選項或名稱上SWIFT 2.2 –

+0

對不起,你可以嘗試AVPlayerItemDidPlayToEndTimeNotification – Rajat

+0

時的完成按鈕被竊聽這個選項無法控制。它只是控制視頻播放完整的視頻長度。 :( –

0

我用這一招,它適用於我的情況,但它可能給你一個線索:

步驟一:

上添加觀察家你想從那裏播放器視圖控制器出示您的視圖控制器得到通知時,其幀之間的變化:

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) 

第二步:

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() 
     } 
    } 
} 

第三步:

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) 
} 
相關問題