UITableViewCell重载问题中的AVPlayerLayer

时间:2013-11-04 14:10:41

标签: cocoa-touch uitableview avplayer avplayerlayer

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

0 个答案:

没有答案