カスタム 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;
}
[self.avPlayerView removeFromSuperview]行を cleanPlayer メソッドから削除すると、スクロールは素晴らしいものになりますが、かなりの回数スクロールした後、セルはビデオの再生を停止し、間違ったビデオがセルに表示され始めます。コードを追加し直すと、セルが作成されるたびにわずかな「しゃっくり」が発生し、少し面倒です。何が起こっているのかについての洞察は大歓迎です。ああ、私はプロファイラーを使用しましたが、原因を特定するのに役立つものは何も見つかりませんでした. 前もって感謝します!