Hier ist eine andere Herangehensweise, Puristen werden es nicht mögen, aber ich konnte nicht herausfinden, wie man die YTPlayerView, die in meiner benutzerdefinierten UICollectionViewCell erstellt wurde, richtig freigibt.
In Anbetracht der Tatsache, dass Sie nur ein Video zur Zeit spielen, weil zwei verschiedene Instanzen von YTPlayer nicht gleichzeitig spielen können, müssen Sie nur verstecken wiederverwendete Zellen mit Video-thumbnail. Einfach gesagt ein UIImageView über dem YTplayerView in Ihrem sublclass von UICollectionViewCell xib, und stellen Sie die Miniaturansicht in ihm:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
//... load customcell xib, manage cellId etc.
// set video id that will be read by the custom cell
[cell setVideoId:cellVideoId];
// set above UIImage
NSData * thumbnailData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: videoThumbnailURL]];
UIImage * videoThumbnail = [UIImage imageWithData: thumbnailData];
[cell.thumbnailImage setImage:videoThumbnail];
return cell;
}
Dort, in benutzerdefinierter UICollectionViewCell .m-Datei müssen Sie nur eine Schaltfläche implementieren, um das Video zu starten, wenn darauf geklickt. ..
- (IBAction)clickPlay:(id)sender {
if (videoId != nil){
[ccellYTPlayerView loadWithVideoId:videoId playerVars:playerVars];
// Hide thumbnail image to reveal the YTPlayerView
[thumbnailImage setHidden:true];
}
}
... und Wiederverwertbarkeit dieser benutzerdefinierten Zelle konfigurieren, die einwandfrei für native obvjects funktioniert:
-(void) prepareForReuse{
[super prepareForReuse];
// preparing UIImage to host another thumbnail
thumbnailImage.image = nil;
[thumbnailImage setHidden:false];
}
diese Weise YTplayers ca n erscheinen in anderen Zellen, niemand wird es sehen, weil durch das Thumbnail versteckt, und der erzeugte Sound ist kein Problem, weil der Benutzer annehmen wird, dass er von der ursprünglichen Zelle kommt (die wegen Scrollen nicht mehr auf dem Bildschirm ist).
Ich weiß, das ist nicht wirklich sauber, aber es hat mir bisher geholfen, YTPlayer Instanz ist nicht so einfach zu recyceln.
Ich bestätige den schwarzen Fall. – Maq