2016-08-09 2 views
0

angezeigt. Ich benötige Ihre Hilfe bei der Bild-/Videoübertragung in meiner App. Ich verwende AVPlayer zum Anzeigen von Videos.Anstelle von Image wird das vorherige Video (AVPlayer) in UIImageView in ios

Ich habe Probleme mit der Anzeige von Bildern, sobald das Video angezeigt wird, die vorherigen Videos werden auf den kommenden Bildern angezeigt.

Hier ist mein Code. Das Bild URL in userPostImageStr ist korrekt, aber es zeigt immer noch das letzte Video.

if (userPostVideo != (NSString *)[NSNull null]) 
{ 
    AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init]; 

    AVPlayer *player = [[AVPlayer alloc] init]; 

    NSURL *url = [NSURL URLWithString:userPostVideo]; 

    AVURLAsset *asset = [AVURLAsset assetWithURL:url]; 

    AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset]; 

    player = [[AVPlayer alloc] initWithPlayerItem:item]; 

    playerViewController.player = player; 

    [playerViewController.view setFrame:cell.userPostImage.frame]; 

    playerViewController.showsPlaybackControls = NO; 

    [cell.userPostImage addSubview:playerViewController.view]; 

    [player play]; 
} 

else if (userPostImageStr != (NSString *)[NSNull null]) 
{ 
    if (userPostImageStr != (NSString *)[NSNull null]) 
    { 
     [cell.userPostImage setShowActivityIndicatorView:YES]; 
     [cell.userPostImage setIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

     [cell.userPostImage sd_setImageWithURL:[NSURL URLWithString:userPostImageStr] 
          placeholderImage:[UIImage imageNamed:@"appIcon"] options: SDWebImageRefreshCached 
           completed:^(UIImage image, NSError error, SDImageCacheType cacheType, NSURL *imageURL) 
     { 

      if (image.size.width < cell.contentView.frame.size.width) 
      { 
       // NEED to write the for contraint update at runtime 
       //[postImageView setConstraintConstant:image.size.width forAttribute:NSLayoutAttributeWidth]; 
      } 

     }]; 
    } 
} 
else 
{ 
    cell.userPostImage.image = [UIImage imageNamed:@"appIcon"]; 
} 

Bitte antworten Sie, wenn jemand dieses Problem kennt.

Vielen Dank.

Antwort

1

Das Problem besteht darin, dass Sie eine Unteransicht hinzufügen, die den Player zur Zelle enthält, ohne die Unteransicht zu entfernen. Das ist, was passiert, wenn Sie

[cell.userPostImage addSubview:playerViewController.view]; 

nennen Wenn die Zelle wiederverwendet wird, die Ansichten, die zuvor sind immer noch da und verursacht alle möglichen unerwartetes Verhalten hinzugefügt wurden.

Bevor Sie eine Subview hinzufügen, sollten Sie die vorhandene Ansicht entfernen, indem

[theViewToBeRemoved removeFromSuperView]; 

Aufruf Dies Sie einen Verweis auf die Ansicht zu halten erfordert. Eine Möglichkeit besteht darin, das Tag auf die Ansicht zu setzen. Zum Beispiel:

// Set the tag on the view. 
playerViewController.view.tag = 1000; 

// Remove the view with the matching tag. 
[[cell.userPostImage viewWithTag:1000] removeFromSuperView]; 

würde ich empfehlen, auch der Spieler eine Eigenschaft in Ihrer Zelle Unterklasse zu halten organisierte alles sein zu müssen.

+0

Das Problem tritt auf, wenn das Steuerelement in "else" -Teil geht, d. H. Während das Bild, aber nicht das Video angezeigt wird. Auch ich hatte das versucht. Aber ich stehe immer noch vor dem gleichen Problem. – Coder

+0

Ich verstehe. Wenn Sie die Ansichtshierarchie der einzelnen Zellen sorgfältig verfolgen, können Sie das Problem sicher aufspüren. Sie müssen nur sicherstellen, dass alle Ansichten vorhanden sind, die vorhanden sein sollen. Wenn es Ansichten gibt, die nicht dort sein sollen, dann müssen Sie identifizieren, woher sie kommen. – Daniel

+0

Hmmm ... ok Danke @Daniel für Ihre Zeit. – Coder