4

YTPlayerView画面に一度に 1 つのアイテムが表示される内部UICollectionView(水平スクロール) を使用しています。内部カスタム セルを追加しUIView、クラス名をYTPlayerViewID インスペクタに変更しました。

私は自動再生を有効にしており、YTPlayerViewうまく再生されています。しかし、次または前のアイテムにスクロールすると、プレーヤーを停止したい。でカスタムセルオブジェクトを取得して、「didEndDisplayingCell」でプレーヤーを停止しようとしましたNSIndexPath。しかしYTPlayerView、カスタム セル オブジェクトを持つインスタンスは、'didEndDisplayingCell' で (null) を返します。そのため、ビデオの再生を停止できません。次/前のアイテムにスクロールするときにビデオの再生を停止するにはどうすればよいですか?

UICollectionViewまた、テキスト、画像、ビデオ (YTPlayerView または AVPlayer) を表示するための 3 つの異なるカスタムセルがあります。

編集 以前の可視セル インデックスパスを保存して、「cellForItemAtIndexPath」でカスタム ビデオ セル オブジェクトを取得しようとしました。カスタムセルオブジェクトを取得できますが、そのインスタンスを取得しようとすると、YTPlayerView新しいオブジェクトが返されYTPlayerViewます。

でYouTubeビデオを処理する正しい方法を誰かに提案してもらえますかUICollectionView

4

1 に答える 1

1

Ok、

今、私は問題を理解しましたが、自分で試してみると、- (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 ビデオを停止します。

于 2016-05-19T08:52:42.537 に答える