我有自定义的UITableViewCell类,它将AVPlayerLayer保存在其视图之一(称为videoView)中。每次我必须加载一个新的单元格(在 cellForRow ... 方法内)我正在检查是否有AVPlayerLayer并创建一个新的以防万一它不是在过去:
_playerLayer = nil ;
for(CALayer * layer in _videoView.layer.sublayers)
if ([layer isKindOfClass:[AVPlayerLayer class]]) {
_playerLayer = (AVPlayerLayer*) layer;
}
if(!_playerLayer)
{
_playerLayer.player = nil ;
_playerLayer = [AVPlayerLayer layer];
[_videoView.layer addSublayer:_playerLayer];
}
有时,我想在播放视频时重新加载整个单元格(例如,为了更新高度或副标题)。再次调用 cellForRow ... 方法,但是那时我正在获取新单元格(有没有办法强制使用旧单元而不是获取新实例?)。我想将播放器/播放器层的状态从一个视图移动到另一个视图。我这样做:
// create AVPlayerLayer
if(iAmPlayingButCellIsReloaded)
{
_playerLayer.player = playerWhichIsPlaying;
// time resets to 0 here
}
大多数情况下,它工作正常,但有些情况下,更换单元格后视频重新启动(移至开头)。它发生在每次重新加载时,很少在下一次迭代中发生。 那有什么问题吗?我应该等待完成视频,然后重新加载单元格吗?我可以以某种方式强制在重新加载行时使用旧单元吗?有没有更好的方法将AVPlayerLayer / AVPlayer从一个地方复制到另一个地方?