我有自定义的 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 从一个地方复制到另一个地方?