2016-05-17 3 views
3

Я использую YTPlayerView внутри UICollectionView (Горизонтальная прокрутка) с одним элементом, видимым за раз на экране. Я добавил UIView внутри пользовательской ячейки и изменил имя класса на YTPlayerView в Инспекторе идентификации.Как остановить воспроизведение видео в YTPlayerView внутри UICollectionViewCell при прокрутке?

Для YTPlayerView Я включил AutoPlay и хорошо играет. Но когда я перехожу к следующему или предыдущему пункту, я хочу остановить игрока. Я попытался остановить игрока в «didEndDisplayingCell», получив пользовательский объект ячейки с NSIndexPath. Но YTPlayerView экземпляр с пользовательским объектом ячейки возвращает (null) в 'didEndDisplayingCell'. Поэтому я не могу остановить воспроизведение видео. Как остановить воспроизведение видео при прокрутке до следующего/предыдущего элемента?

И у меня есть 3 различных пользовательских ячейки UICollectionView для отображения текста, изображений и видео (YTPlayerView или AVPlayer).

EDIT Я пытался получить объект пользовательского видеофильма ячейки в «cellForItemAtIndexPath» при сохранении предыдущей видимой ячейки indexpath. И я могу получить пользовательский объект ячейки, но когда я пытаюсь получить экземпляр YTPlayerView, он возвращает новый объект для YTPlayerView.

Может ли кто-нибудь предложить мне правильный способ обработки видео youtube в UICollectionView.

+0

В вашем 'UICollectionViewCell', в' prepareForReuse', вы можете остановить плеер? – Larme

+0

У вас есть пользовательский класс 'UICollectionViewCell'? Если да, вы можете переопределить 'prepareForReuse'. – Larme

+0

'prepareForReuse' не получает вызов, потому что у меня 3 разных ячейки 1) Изображение 2) Текст 3) Youtube видео. Can u pls предлагает любой другой вариант @Larme – SriKanth

ответ

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.

+0

Спасибо @Lefteris – SriKanth

+0

Вместо '[cell stopVideo]', я остановил видео с помощью '[cell.youTubePlayerView pauseVideo]'. 'youTubePlayerView' является экземпляром представления игрока в пользовательской ячейке. @Lefteris – SriKanth

+0

Работает в обоих направлениях. Если вы создаете YTPlayerView, общедоступный в ячейке, это прекрасно! – Lefteris

Смежные вопросы