这是另一种方法,纯粹主义者不会喜欢它,但我不知道如何正确释放/重新初始化在我的自定义 UICollectionViewCell 中创建的 YTPlayerView。
考虑到您一次只能播放一个视频,因为 YTPlayer 的两个实例不会同时播放,您只需要使用视频的缩略图隐藏重复使用的单元格。只需在 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];
}
这样,YTplayers 可以出现在其他单元格中,没有人会看到它,因为它被缩略图隐藏了,并且产生的声音不是问题,因为用户会认为它来自原始单元格(由于滚动而不再出现在屏幕上) )。
我知道那不是很干净,但到目前为止它对我有帮助,YTPlayer 实例并不那么容易回收。