我创建了一个真正简单的播放器类,我将其添加为自定义 uitableviewcell 的属性。我对滚动相当满意,但认为它可能会更好。我有一个“清理”方法,我从播放器类中调用它来准备播放器以供重用。
-(void)URLFromWeb:(NSURL*)URL{
[self cleanPlayer];
AVAsset* avAsset = [AVAsset assetWithURL:URL];
AVPlayerItem *playerItem =[[AVPlayerItem alloc]initWithAsset:avAsset];
if (!self.player) {
self.player = [AVPlayer playerWithPlayerItem:playerItem];
[self.player setActionAtItemEnd:AVPlayerActionAtItemEndNone];
}
if (!self.avPlayerLayer) {
self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.avPlayerView = [[UIView alloc] initWithFrame:CGRectZero];
[self.avPlayerView.layer addSublayer:self.avPlayerLayer];
[self addSubview:self.avPlayerView];
[self.avPlayerLayer setFrame:CGRectMake(0, 0, 320, 320)];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerPlayedToEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
}
[self.avPlayerView removeFromSuperview];
[self addSubview:self.avPlayerView];
}
这是“cleanPlayer”的代码
-(void)cleanPlayer{
[self.avPlayerView removeFromSuperview];
self.avPlayerView = nil;
self.avPlayerLayer = nil;
self.player = nil;
}
如果我从 cleanPlayer 方法中删除[self.avPlayerView removeFromSuperview]行,滚动效果非常棒,但是在滚动相当多次后,单元格停止播放视频并且错误的视频开始在单元格中显示。每次创建单元格时,重新添加代码都会导致轻微的“打嗝”,这有点烦人。任何有关正在发生的事情的见解将不胜感激。哦,我使用了探查器,但在确定原因方面没有发现任何有用的信息。提前致谢!