2017-08-03 97 views
0

我使用AVPlayer在我的TableViewCell中顯示視頻。它在玩TableViewCell,但問題是我無法阻止它。 我用這個代碼在cellforRow停止播放tableviewcell中的AVPlayer

播放視頻
 avPlayer = AVPlayer(url: videoURL! as URL) 
     playerLayer = AVPlayerLayer(player: avPlayer) 
     playerLayer.frame = CGRect(x: cell.videoview.frame.origin.x, y: cell.videoview.frame.origin.x, width:cell.videoview.frame.size.width, height: cell.videoview.frame.size.height) 
     cell.videoview.layer.addSublayer(playerLayer) 
     avPlayer?.play() 

avPlayerplayerLayer都在viewController像這樣定義

var avPlayer : AVPlayer? 
var playerLayer = AVPlayerLayer() 

我使用這個代碼停止視頻

self.avPlayer?.pause() 
    self.playerLayer.removeFromSuperlayer() 
    self.avPlayer?.rate = 0.0 
    self.avPlayer?.replaceCurrentItem(with: nil) 
    self.avPlayer = nil 

我的問題是,我該如何停止通過AVPlayer在上運行的視頻? 請建議一個解決方案,如果有任何其他替代方案,請提出這個建議。

+0

檢查名爲stopVideoPlayer的ibaction在HomeViewController中不存在。檢查故事板並刪除不良連接。 – KKRocks

+0

它存在我已經創建了一個斷點來檢查它在這條線上崩潰self.avPlayer =無 –

+0

你實現了這種方法'stopVideoPlayer' –

回答

1

由於單元格的可重用行爲,它會自行釋放子視圖實例,因此您必須在didEndDisplayingCell委託方法中停止它。

override func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    if let cell = cell as? MyCustomCell { 
     if let play = player { 
      print("stopped") 
      play.pause() 
      player = nil 
      print("player deallocated") 
     } else { 
      print("player was already deallocated") 
     } 
    } 
} 

OR

你可以得到電池的實例和搜索播放器實例並停止它。

for view in cell.subviews { 
     //after comparison stop the player here 
} 
+0

我認爲鏈接到方法文檔會更好;) –

+0

@Salman_Ghumsani我需要知道如何停止正在播放的視頻?你知道如何在播放時停止avplayer。 –

+0

好的謝謝你的編輯.. –

0

AVPlayer沒有停止方法。所以你可以將尋找時間設置爲0並暫停播放器。

videoPlayer.seek(to: CMTimeMake(0, 1)) 
videoPlayer.pause() 

此外,如果你想檢查videoCell是否可見。您可以使用下面的代碼,它將爲您提供可見的單元格索引數組。所以你可以簡單地檢查數組是否包含你的視頻單元索引。

tableView.indexPathsForVisibleRows 
+0

此代碼仍然無法阻止播放器。而且我需要停止播放器,即使它在屏幕上。問題在於代碼無法阻止播放器。 –

+0

你必須像這個playerLayer一樣使用這段代碼。 videoPlayer.pause()。因爲您在playerLayer上添加了videoPlayer。它可能工作 –