2

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

4

0 回答 0