我有一个tableview,有些单元格中有视频。当用户访问具有视频的单元格时,视频会自动播放。 我想要的是在滚动到下一个单元格后暂停视频。现在,当你在一个有视频播放的单元格上时,但是当你滚动到下一个单元格时,视频就会变成完全白色(我在下面有示例图像)。我的代码如下,我正在使用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
}
这是一个例子,当你到达视频自动播放的单元格时这很好[见下面的第二张图片
]如果你继续向下滚动,这就是视频的外观,它会变成视频播放的大白色空白点。我反而希望此时暂停视频。我知道其他社交网络可以在用户向下滚动时暂停视频,所以我想做同样的事情。
答案 0 :(得分:0)
当屏幕变为白色时,表示AVPlayer已从视图中删除。您可以通过设置单元格和self.view的背景颜色并查看它是否从白色变为该颜色来测试它。从您发布的代码中,我看不出为什么会这样,所以您可能需要发布更多代码或自行解决。
要获得暂停功能,有一个委托方法didEndDisplaying https://developer.apple.com/documentation/uikit/uitableviewdelegate/1614870-tableview,表示单元格何时从屏幕上移开。在这里,你需要一个外部参考AVPlayer,你会做
MyAVPlayer.player?.pause()
请记住,有一个偷偷摸摸的限制,IOS在引入不稳定的行为之前只能支持16个AVPlayer实例(一些视频随机开始闪烁并变黑)。如果你碰到这个,那么简单地暂停视频是不够的,你将不得不在上下方向创建8个视频的缓冲区,并手动分配和释放AVPlayers。查看此帖子了解更多详情 Multiple AVPlayers in a UIScrollView - only 16 of them are shown