Question

J'ai une vue simple qui crée un MPMoviePlayerViewController lorsque l'utilisateur appuie sur un bouton, en utilisant la presentMoviePlayerViewControllerAnimated: méthode. Les nouvelles diapositives de contrôleur de vue et en montre le joueur de film, jusqu'à présent si bien.

Toutefois, lorsque le bouton est enfoncé, les diapositives de contrôleur de vue en cours sur le fond, montrant une vilaine (par défaut probablement) vue blanc, que les bâtons autour de partout d'une demi-seconde à quelques secondes, jusqu'à ce que le contrôleur de vue de film est montré . Il semble que c'est dépendant de ma connexion réseau, comme si le contrôleur de vue de film est de télécharger des parties du film avant de montrer le lecteur.

Ai-je fait quelque chose de mal, ou comment puis-je contourner cela? Je préfère vraiment juste montrer le contrôleur de vue film directement, peut-être même sans glisser le contrôleur de vue précédente qui maintient le bouton de lecture, mais toujours animé comme un contrôleur de vue modal.

Merci!

Christoph

Était-ce utile?

La solution 2

J'ai fini par mettre tout l'arrière-plan de la vue de noir. Ne résout pas le délai, mais le fait paraître beaucoup plus agréable:

  theMovieVC.view.backgroundColor = [UIColor blackColor];

Autres conseils

La solution a consisté à initialiser le contrôleur de vue du joueur lorsque la vue parent est créé, puis appelez prepareToPlay sur la moviePlayer à l'intérieur. Cela supprime le temps d'attente lorsque le bouton de lecture est poussé et (je suppose) le déplace vers lorsque l'utilisateur arrive à la vue parent dont il peut lire le film.

EDIT: Cela supprime le retard, mais pour une raison quelconque, l'initialisation du contrôleur de vue de film aussi quand lectures automatiques il est chargé, de sorte que ce ne est pas une bonne solution.

est ce que je fais pour iOS> 3.2:

- (void) play {
    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mMovieURL];

    if ([mMoviePlayer respondsToSelector:@selector(loadState)]) 
    {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePreloadDidFinishIOS32:) 
                                                     name:MPMoviePlayerContentPreloadDidFinishNotification 
                                                   object:nil];


        [mMoviePlayer prepareToPlay];
        [mMoviePlayer play];
        mMoviePlayer.controlStyle = MPMovieControlStyleEmbedded;
        [mMoviePlayer setMovieControlMode:MPMovieControlModeDefault];
        [mMoviePlayer setBackgroundColor:[UIColor clearColor]];
    }
}

et

- (void) moviePreloadDidFinishIOS32:(NSNotification*)notification;
{
    // Remove observer
    [[NSNotificationCenter  defaultCenter] 
     removeObserver:self
     name:MPMoviePlayerContentPreloadDidFinishNotification
     object:nil];

    self.view = mMoviePlayer.view;
}

Ainsi, dans le viewDidLoad vous pouvez instancier ce que vous voulez (UIActivityIndicatorView par exemple). Le contrôleur de vue ne sera remplacée lorsque la pré-charge est terminée.

Je constate la même question dans mon application. Quelqu'un at-il des suggestions pour éviter ce problème?

Dans mon cas, je pousse la MPMoviePlayerViewController à l'interface utilisateur dans une fenêtre contextuelle modale.

// build the movie player
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
MPMoviePlayerViewController *movieViewController = [[[MPMoviePlayerViewController alloc] initWithContentURL:request.URL] autorelease];
[movieViewController.moviePlayer prepareToPlay];
movieViewController.view.backgroundColor = [UIColor blackColor];

// show the movie player view
[self.parentViewController presentModalViewController:movieViewController animated:YES];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top