2017-10-03 22 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 초이고 아래로 스크롤하면 여전히 동영상이 재생된다는 소리를 듣고 사용자가 멀리 이동하면 즉시 동영상을 중단하고 싶다는 것입니다.

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

그래서 서로 옆에있는 두 셀이 동시에 비디오와 디스플레이를 가지고 있다면 자동으로 재생됩니다. 어떤 점에서 어떻게 작동 하는지를 고려하는 것이 좋습니다. – Wez

+0

한 번에 하나의 비디오 만 시작됩니다. 세포는 충분히 커서 다른 내용물을 포함하고 있기 때문에 한 번에 1 개의 세포에만있을 수 있습니다. – user1591668

+0

지금은 충분히 공정하지만 더 큰 기기에 표시되는 경우 어떻게해야합니까? - 사용자가 협상 한 것보다 더 많은 소음으로 포격을 받기 전에이를 고려하고 싶습니다. – Wez

답변

2

여기 당신을 위해 잘 작동 테이블 뷰의 위임 방법을 사용하여 당신에게 의미의 댄의 제안 할 수 있습니다

지금 난 그냥있는 UITableViewCell 여기에 스크롤 또는 어쩌면 비디오를 중지해야 내있는 ScrollView 코드 셀이 화면에서 벗어날 때 비디오를 일시 중지합니다.

이 같은

뭔가 작업을해야 :

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

내가이 자동으로 일시 정지 등에가는 버퍼링이있는 경우에 따라 약간의 랙이 될 수 다시 재생 ... 그래서 당신은 할 수 있습니다 제안 사용자가 탭으로 동영상을 재생할 수 있도록하는 것이 좋습니다.