ここに別のアプローチがあります。純粋主義者はそれを好まないでしょうが、カスタム UICollectionViewCell で作成された YTPlayerView を適切に解放/再初期化する方法を見つけることができませんでした。
YTPlayer の 2 つの複数のインスタンスが同時に再生されないため、一度に 1 つのビデオのみを再生することを考慮すると、再利用されたセルをビデオのサムネイルで非表示にするだけです。UICollectionViewCell xib のサブクラスの YTplayerView の上に UIImageView を配置し、その中にサムネイルを設定します。
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
//... load customcell xib, manage cellId etc.
// set video id that will be read by the custom cell
[cell setVideoId:cellVideoId];
// set above UIImage
NSData * thumbnailData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: videoThumbnailURL]];
UIImage * videoThumbnail = [UIImage imageWithData: thumbnailData];
[cell.thumbnailImage setImage:videoThumbnail];
return cell;
}
そこに、カスタム UICollectionViewCell .m ファイルで、クリックしたときにビデオを起動するボタンを実装するだけです...
- (IBAction)clickPlay:(id)sender {
if (videoId != nil){
[ccellYTPlayerView loadWithVideoId:videoId playerVars:playerVars];
// Hide thumbnail image to reveal the YTPlayerView
[thumbnailImage setHidden:true];
}
}
...そして、このカスタムセルの再利用性を構成します。これは、ネイティブオブジェクトに対して問題なく機能します:
-(void) prepareForReuse{
[super prepareForReuse];
// preparing UIImage to host another thumbnail
thumbnailImage.image = nil;
[thumbnailImage setHidden:false];
}
このようにして、YTプレーヤーは他のセルに表示できます。サムネイルで隠されているため、誰も見ることはありません。また、生成された音は、ユーザーが元のセルからのものであると想定するため、問題ではありません(スクロールのために画面に表示されなくなりました)。 )。
私はそれが本当にきれいではないことを知っていますが、これまでのところ役に立ちました.YTPlayerインスタンスはリサイクルが簡単ではありません.