3

J'ai une application iPad qui a 4 boutons sur le côté gauche qui correspond à 4 clips vidéo différents. Lorsqu'un utilisateur tape sur la vidéo qu'il souhaite voir, il apparaît sur le côté droit. Je veux qu'il semble être en train de charger (comme si c'était en streaming sur internet). J'ai ajouté le UIActivityIndicator au centre du cadre vidéo noir et j'ai un fil qui fait une pause pendant 3 secondes. Cependant, le lecteur contenant la vidéo précédente ne disparaît pas. Il se fige sur la dernière image de la vidéo précédente pendant 3 secondes (masquant l'indicateur d'activité), puis la nouvelle vidéo apparaît.Masquer MPMoviePlayerController pendant le chargement d'une nouvelle vidéo

Des idées sur la façon de rendre le lecteur temporairement caché? Merci pour toute aide. Voici mon code:

-(IBAction) videoButton1{ 
    [player stop]; 
    [player release]; 

    [self.activityIndicator startAnimating]; 

    NSString *url = [[NSBundle mainBundle] pathForResource:@"video1" ofType:@"mov"]; 
    [self setupVideoPlayer:url]; 
} 

-(void) setupVideoPlayer: (NSString *) url{ 
    player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:url)]; 
    player.view.frame = CGRectMake(487, 205, 478, 320); 

    [self.view addSubview:player.view]; 

    [NSThread sleepForTimeInterval:3.0]; 
    self.activityIndicator stopAnimating]; 

    [player play]; 
} 
+0

Je voulais juste cogner ce fil. Je n'arrive toujours pas à comprendre pourquoi après avoir relâché le lecteur, il tient toujours la dernière image de la vidéo à travers le fil "sommeil". La commande sleep est même appelée après que le lecteur ait chargé la nouvelle vidéo, et juste avant la commande de lecture. Toute information serait appréciée. – Brian

Répondre

2

Vous pouvez définir le cadre de votre lecteur à une vue que vous pouvez faire dans IB ou par programme au lieu de faire un CGRectMake chaque fois.

self.player.view.frame = self.viewForMovie.bounds; Auto-play.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Puis dans votre "videoButton1" vous pouvez définir l'alpha de la vue à 0

viewForMovie.alpha = 0;

Et dans votre « setupVideoPlayer » vous pouvez changer l'alpha à 1.

+0

Merci pour la réponse. J'ai joué avec ce que vous avez dit, la seule chose maintenant est que le lecteur vidéo ne joue pas automatiquement dans le nouveau film. Les contrôles apparaissent correctement, mais je ne pense pas qu'il détecte les touches. Plus de pointeurs? – Brian

+0

Je l'ai compris. Le problème était que j'avais le lecteur de film dans un nouveau fil. Maintenant, je sais combien Apple n'aime pas ça. Donc, dans le nouveau thread j'ai utilisé [NSThread sleepforTimeInterval: 3.0]; // Apparemment être en train de charger. Ensuite, utilisez la méthode performSelectorOnMainThread pour charger la vidéo dans la vue. Merci pour l'info Ricardo. Tu m'as indiqué dans la bonne direction. – Brian