2016-05-17 12 views
3

Ich benutze YTPlayerView innerhalb UICollectionView (Horizontal Scroll) mit einem Element auf einmal auf dem Bildschirm sichtbar. Ich habe eine UIView innerhalb einer benutzerdefinierten Zelle hinzugefügt und den Klassennamen im Identity Inspector in YTPlayerView geändert.Wie kann ich das Abspielen von Videos in YTPlayerView in UICollectionViewCell beim Scrollen stoppen?

Für YTPlayerView habe ich AutoPlay aktiviert und es spielt gut. Aber wenn ich zum nächsten oder vorherigen Element blättern will, möchte ich den Player anhalten. Ich habe versucht, den Player in "dedEndDisplayingCell" zu stoppen, indem ich ein benutzerdefiniertes Zellenobjekt mit NSIndexPath erhalte. Aber YTPlayerView Instanz mit benutzerdefinierten Zellenobjekt gibt (Null) in "DidEndDisplayingCell" zurück. Ich kann das Video nicht stoppen. Wie kann ich die Videowiedergabe beenden, wenn ich zum nächsten/vorherigen Element blättern?

Und ich habe 3 verschiedene benutzerdefinierte UICollectionView Zellen zum Anzeigen von Text, Bildern und Videos (YTPlayerView oder AVPlayer).

EDIT Ich habe versucht, das benutzerdefinierte Videozellobjekt in ‚cellForItemAtIndexPath‘ zu erhalten, indem vorheriges sichtbare Zelle indexPath speichern. Und ich kann das benutzerdefinierte Zellenobjekt abrufen, aber wenn ich versuche, die Instanz YTPlayerView abzurufen, gibt es ein neues Objekt für YTPlayerView zurück.

Kann mir jemand den richtigen Weg vorschlagen, mit Youtube-Videos in UICollectionView umzugehen. aber

+0

In Ihrer 'UICollectionViewCell', in' prepareForReuse', können Sie den Player stoppen? – Larme

+0

Haben Sie eine benutzerdefinierte 'UICollectionViewCell'-Klasse? Wenn ja, können Sie 'prepareForReuse' überschreiben. – Larme

+0

'prepareForReuse' wird nicht aufgerufen, weil ich 3 verschiedene Zellen habe 1) Bild 2) Text 3) Youtube Video. Können Sie andere Option vorschlagen @Larme – SriKanth

Antwort

1

Ok,

Jetzt habe ich das Problem verstanden, wenn ich mich selbst versuchen, habe ich einen absolut gültigen Zellbezug in den - (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath Delegierten erhalten.

Es sollte dort nicht null sein. Sie sollten dies jedes Mal erhalten, wenn eine Zelle verschwindet, wo Sie den Typ der Zelle überprüfen sollten, die sich versteckt!

Wenn die Zelle ein Typ deiner YouTube-Zelle ist, dann stoppe nur die Videowiedergabe. Hier ist ein grobes Beispiel:

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { 
    if ([cell isKindOfClass:[YouTubeVideoCell class]]) { 
     YouTubeVideoCell *youtubeCell = (YouTubeVideoCell*)cell; 
     [youtubeCell stopVideo]; 
    } 
} 

Wo YouTubeVideoCell Ihre benutzerdefinierte YTPlayerView Zelle Unterklasse sein sollte und stopVideo sollte eine öffentliche Methode der Zelle, wo im Innern Sie das YTPlayerView Video stoppen.

+0

Danke @Lefteris – SriKanth

+0

Statt '[cell stopVideo]', habe ich das Video gestoppt von '[cell.youTubePlayerView pauseVideo]'. 'youTubePlayerView' ist eine Instanz der Spieleransicht in einer benutzerdefinierten Zelle. @Lefteris – SriKanth

+0

Funktioniert in beide Richtungen. Wenn du den YTPlayerView öffentlich in der Zelle machst, ist das völlig in Ordnung! – Lefteris