【问题标题】:IOS Swift How can I pause a video as a user scrolls byIOS Swift如何在用户滚动时暂停视频
【发布时间】:2018-08-16 08:27:09
【问题描述】:

我有一个表格视图,其中一些单元格中有视频。当用户到达有视频的单元格时,视频会自动播放。 我想要的是在您滚动到下一个单元格后暂停视频。现在,当您在一个播放视频的单元格上时,但是一旦您滚动到下一个单元格,视频就会变成完全白色(我在下面有示例图像)。我的代码在下面,我正在使用 swift 4 和视频的 AVFoundation。

 // I call my custom method below
 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    return homeProfilePlacesCell.HomeProfilePlaceTVC(tableView, cellForRowAt: indexPath, streamsModel: streamsModel, HOMEPROFILE: homeProfile, controller: self)

}

// This is a custom method since I have other TableViews that use this code

func HomeProfilePlaceTVC(_ tableView: UITableView, cellForRowAt indexPath: IndexPath, streamsModel : streamModel,HOMEPROFILE: HomeProfile, controller: UIViewController) -> UITableViewCell {




    let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTVC", for: indexPath) as! HomeTVC

 if filename.pathExtension == "mov" {
 // If a file has a 'mov' then it is a video and play it

             let movieURL = URL(string: streamsModel.stream_image_string[indexPath.row])
             // sets Video Height 
             cell.videoHeight.constant = CGFloat(Float(cell.video_height!))
             streamsModel.playerView = AVPlayer(url: movieURL!)
             streamsModel.MyAVPlayer.player = streamsModel.playerView
             streamsModel.MyAVPlayer.videoGravity = AVLayerVideoGravity.resizeAspectFill.rawValue
             streamsModel.MyAVPlayer.showsPlaybackControls = false
             streamsModel.MyAVPlayer.view.frame = cell.videoView.bounds
             cell.videoView.addSubview(streamsModel.MyAVPlayer.view)
             controller.addChildViewController(streamsModel.MyAVPlayer)
             streamsModel.playerView?.isMuted = false
             streamsModel.MyAVPlayer.player?.play() // play


        }


     }

    else {
        streamsModel.MyAVPlayer.player?.pause() // pause it

    }



    return cell
}

这是一个示例,当您到达单元格时,视频会自动播放,这很好[见下面的第二张图片

如果您继续向下滚动,这就是视频的外观,它会变成一个大的白色空白点,播放视频。相反,我希望此时暂停视频。我知道其他社交网络可以在用户向下滚动时暂停视频,所以我也想这样做。

【问题讨论】:

标签: ios swift uitableview swift3 avfoundation


【解决方案1】:

当屏幕像这样变白时,这意味着 AVPlayer 已从视图中移除。您可以通过设置单元格和 self.view 的背景颜色并查看它是否从白色变为该颜色来测试这一点。从您发布的代码中,我看不出为什么会发生这种情况,因此您可能需要发布更多代码或自己弄清楚。

要获得暂停功能,有一个委托方法 didEndDisplaying https://developer.apple.com/documentation/uikit/uitableviewdelegate/1614870-tableview,表示单元格何时移出屏幕。在这里你需要一个对你的 AVPlayer 的外部引用,你会这样做

MyAVPlayer.player?.pause()

请记住,在引入不稳定行为之前,IOS 只能同时支持 16 个 AVPlayer 实例(某些视频会随机开始闪烁并变黑)。如果遇到这种情况,那么仅仅暂停视频是不够的,您必须在上下方向创建一个包含 8 个视频的缓冲区,并手动分配和取消分配 AVPlayer。查看这篇文章了解更多详情 Multiple AVPlayers in a UIScrollView - only 16 of them are shown

【讨论】:

  • 我想说这不是 AVPlayer 实例,而是 AVPlayer + AVPlayerItem 组合会创建它。
猜你喜欢
  • 2017-08-28
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2015-06-27
相关资源
最近更新 更多