我正在YTPlayerView
(水平滚动)中使用UICollectionView
,一次在屏幕上可见一个项目。我在自定义单元格中添加了UIView
,并且在身份检查器中将类名更改为YTPlayerView
。
对于YTPlayerView
,我已启用自动播放,并且播放良好。但是,当我滚动到下一个或上一个项目时,我想停止播放器。我尝试通过使用NSIndexPath
获取自定义单元对象来停止'didEndDisplayingCell'中的播放器。但是带有自定义单元格对象的YTPlayerView
实例在'didEndDisplayingCell'中返回(空)。因此我无法停止视频播放。滚动到下一个/上一个项目时,如何停止视频播放?
我有3个不同的自定义UICollectionView
单元来显示文本,图像和视频(YTPlayerView或AVPlayer)。
编辑
我试图通过保存以前的可见单元格索引路径来在“cellForItemAtIndexPath”中获取自定义视频单元格对象。而且我能够获得自定义单元格对象,但是当我尝试获取YTPlayerView
的实例时,它将为YTPlayerView
返回新的对象。
谁能建议我以UICollectionView
处理youtube视频的正确方法。
最佳答案
好,
现在,我已经理解了问题所在,但是当我尝试自己的时候,我在- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
委托中得到了一个完全有效的单元格引用。
那里不应该为null。每次单元格消失时,您都应该获取此信息,您应在此处检查隐藏的单元格的类型!
如果该单元格是您的YouTube单元格的类型,则仅停止播放视频。
这是一个粗略的示例:
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
if ([cell isKindOfClass:[YouTubeVideoCell class]]) {
YouTubeVideoCell *youtubeCell = (YouTubeVideoCell*)cell;
[youtubeCell stopVideo];
}
}
YouTubeVideoCell应该是您的自定义YTPlayerView单元子类,而stopVideo应该是该单元在其中停止YTPlayerView视频的公共方法。