如何在滚动时停止在UICollectionViewCell内的YTPlayerView中播放视频?

时间:2016-05-17 09:36:14

标签: ios objective-c youtube-api ytplayerview

我在YTPlayerView内使用UICollectionView(水平滚动),屏幕上一次只能显示一个项目。我在自定义单元格中添加了UIView,并在Identity检查器中将类名更改为YTPlayerView

对于YTPlayerView我已经启用了自动播放,并且播放效果很好。但是,当我滚动到下一个或上一个项目时,我想要停止播放器。我尝试通过NSIndexPath获取自定义单元格对象来停止'didEndDisplayingCell'中的播放器。但是具有自定义单元对象的YTPlayerView实例在'didEndDisplayingCell'中返回(null)。所以我无法停止视频播放。滚动到下一个/上一个项目时,如何停止视频播放?

我有3个不同的自定义UICollectionView单元格来显示文本,图像和视频(YTPlayerView或AVPlayer)。

修改 我试图通过保存以前的可见单元索引路径来获取'cellForItemAtIndexPath'中的自定义视频单元对象。我可以获取自定义单元格对象,但是当我尝试获取YTPlayerView的实例时,它将返回YTPlayerView的新对象。

有人可以建议我使用UICollectionView处理YouTube视频的正确方法。

1 个答案:

答案 0 :(得分:1)

确定,

现在我已经理解了这个问题,但是当我尝试自己时,我在- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath代表中得到了一个完全有效的单元格引用。

那里不应该为空。每次细胞消失时你应该得到这个,你应该检查隐藏的细胞类型!

如果此单元格是您的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视频。