2017-10-03 8 views
2

私はデータベースからデータを取得するtableViewを持っています。私のTableView内のいくつかのセルにはビデオが含まれており、ビデオが表示されると正しく表示されます。ユーザーがスクロールしているときにビデオを止める方法

私の問題は、誰かがスクロールし続けると、そのビデオは引き続き再生されるということです。私はそれを変更したいと思います。ユーザーがビデオの一部を見てスクロールし続けると、ビデオをすぐに終了したいと思います。私はその問題を解決するのに近いと思っていますが、それはまだありません。

これは私のコードである:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Home", for: indexPath) as! Home 
    let filename = streamsModel.video_image[indexPath.row] as NSString 
    if filename.pathExtension == "mov" { 
     let movieURL = URL(string: streamsModel.video_image[indexPath.row]) 

     cell.videoCapHeight.constant = CGFloat(Float(cell.pic_height!)) 
     cell.playerView = AVPlayer(url: movieURL!) 
     cell.MyAVPlayer.player = cell.playerView 
     cell.MyAVPlayer.showsPlaybackControls = false 
     cell.MyAVPlayer.view.frame = cell.videoView.bounds 
     cell.videoView.addSubview(cell.MyAVPlayer.view) 
     controller.addChildViewController(cell.MyAVPlayer) 
     cell.playerView?.isMuted = false 
     cell.MyAVPlayer.player?.play() 

    } 
    return cell 
} 

すなわちコード単にstreamsModel.video_imageは.MOV拡張子(JSON)を有しているかどうかを確認の上。そうであれば、それはムービー/ビデオを取得し、それをAVPlayerに表示します。

コードからわかるように、ビデオは自動的に再生されるようにPlay()メソッドが使用されています。問題は、たとえば、ビデオの長さが1分で、そのビデオを20秒間見てスクロールすると、そのビデオの再生が聞こえ、ユーザーがスクロールしたらすぐにビデオを停止したいと思うということです。

これは私のscrollViewコードで、今私はちょうどスクロール上または多分のUITableViewCellでここに動画を停止する必要があります:テーブルビューのデリゲートメソッドを使用しての

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    if (self.lastContentOffset > scrollView.contentOffset.y + 0) { 
     print("scrolling up") 
    } 
    else if (self.lastContentOffset < scrollView.contentOffset.y) { 
     print("scrolling down") 
    } 
    self.lastContentOffset = scrollView.contentOffset.y 
} 
+0

したがって、隣り合う2つのセルの両方でビデオと表示が同時に行われると、両方のセルが自動的に再生されますか? - ある時点でどのように動作するかを検討したいかもしれません。 – Wez

+0

一度に1つのビデオしか開始しません。セルは十分に大きいので、他のコンテンツを含んでいるので、一度に1つのセルにしか入れることができません。 – user1591668

+0

今は十分に公正ですが、より大きなデバイスに表示されるとどうなりますか? - 私はユーザーが交渉よりも多くの騒音で砲撃される前にそれを検討したいと思う。 – Wez

答えて

2

ダンの提案は、あなたができることを意味し、ここであなたのために働くでしょうセルが画面外に移動するとビデオが一時停止します。このような

何か作業をする必要があります:

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { 
    // Dequeue the cell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Home", for: indexPath) as! Home 
    // Check the player object is set (unwrap it) 
    if let player = cell.MyAVPlayer.player { 
     // Check if the player is playing 
     if player.rate != 0 { 
      // Pause the player 
      player.pause() 
     } 
    } 
} 

をしたいことがありので、私は...などに行くのバッファリングがある場合には自動的に一時停止して、再度プレイするに応じて、少しラグ可能性を示唆していますユーザーがビデオをタップで再生できるようにすることを検討してください。

関連する問題