swift - 当视频出现在可见单元格中时,它会在 UITableViewCell 中重新启动

标签 swift uitableview avplayerviewcontroller

我正在我的 UITableViewCell 中加载一个 AVPlayerViewController,它运行良好,但我正在尝试在单元格可见时播放视频,在单元格不可见时暂停视频。

问题是视频以编程方式加载到单元格中,当单元格消失并重新出现时,这会再次加载视频,因此它总是从头开始。例如:如果我按下播放视频并在 10 秒内暂停,然后滚动以使视频单元格不可见,在我返回视频单元格后,它会再次加载并在 0 秒后提供视频。

我使用函数 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 使用以下代码在我的单元格中加载视频:

let videoURL = NSURL(string: "url_video")
let player = AVPlayer(URL: videoURL!)

cell.av.player = player
cell.av.view.frame = cell.bounds
self.addChildViewController(cell.av)
cell.contentView.addSubview(cell.av.view)
cell.av.didMoveToParentViewController(self)
cell.av.view.translatesAutoresizingMaskIntoConstraints = false

我需要视频保持暂停状态,我该怎么做?

最佳答案

问题是,每当 tableViewCell 离开 View 并返回时,它就会被重新创建。您将不得不想出一种方法来保存用户在每个视频中的位置。

创建一个包含一串 0 的数组,每个 0 对应于每个单元格中视频的时间。

var times = [0,0,0,0...]

现在假设我在第二个单元格上并开始播放我的视频。视频播放了 10 秒,然后我暂停了它。您可以通过以下方式获取我的持续时间:

AVPlayerItem *currentItem = yourAVPlayer.currentItem.currentTime

现在,我滚动浏览单元格,然后返回到它。在您的 CellForRowAtIndexPath 函数中,确保使用数组中的任何值初始化每个视频 - times

您可以通过此链接的帮助以特定时间初始化 AVPlayer 视频:Seek to a certain position in AVPlayer right after the asset was loaded

差不多就是这些了。<​​/p>

关于swift - 当视频出现在可见单元格中时,它会在 UITableViewCell 中重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38446850/

相关文章:

ios - 点击段时停止 cellForRowAtIndexPath

ios - 单元格 ImageView 宽度不会改变

ios - 从解析中删除对象/无法转换为 PFObject/NSArrayM

iOS:自定义UITableViewCell的实现需要调用super

ios - 如何设置 userinteractionEnabled : to NO for an AVPlayerViewController?

ios - 以编程方式退出 AVPlayerViewController 全屏?

ios - AVPlayer View Controller 自动旋转关闭?

ios - UIKeyboardWillHideNotification 动画延迟

swift - 错误 : Execution was interrupted, 原因 : signal SIGABRT. 在 swift playgrounds

iphone - 向 UITableView 子类添加属性