Pregunta

Tengo una visión simple que crea una MPMoviePlayerViewController cuando el usuario presiona un botón, utilizando el presentMoviePlayerViewControllerAnimated: método. Las nuevas diapositivas en vista controlador y muestra el reproductor de películas, hasta ahora tan bueno.

Sin embargo, cuando se pulsa el botón, los actuales diapositivas controlador de vista por la parte inferior, que muestran una (probablemente por defecto) Vista en blanco fea, que se pega alrededor de cualquier parte de medio segundo a unos pocos segundos, hasta que aparezca el controlador de vista de la película . Parece como si fuera dependiente de mi conexión a la red, como si el controlador de vista de la película es la descarga de partes de la película antes de mostrar al jugador.

¿Estoy haciendo algo mal, o cómo puedo solucionar esto? Realmente preferiría para mostrar sólo el controlador de vista película directamente, tal vez incluso sin deslizar el controlador de vista previa que sostiene el botón de reproducción, pero todavía animado como un controlador de vista modal.

Gracias!

Christoph

¿Fue útil?

Solución 2

Acabé establecer el fondo de la vista de negro. No soluciona el retraso, pero hace que parezca mucho más agradable:

  theMovieVC.view.backgroundColor = [UIColor blackColor];

Otros consejos

La solución fue inicializar el controlador de vista del jugador cuando se crea la vista padre, y luego llamar a prepareToPlay en el moviePlayer su interior. Que elimina la latencia cuando se pulsa el botón de reproducción y (supongo) lo mueve a cuando el usuario llega a la vista padre de la que puede reproducir la película.

EDIT: Esto elimina el retraso, pero por alguna razón, la inicialización del controlador de vista película también se reproduce automáticamente cuando se carga, por lo que no es una buena solución.

Esto es lo que hago para 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]];
    }
}

y

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

    self.view = mMoviePlayer.view;
}

Así, en el viewDidLoad se puede crear una instancia de lo que quiere (UIActivityIndicatorView por ejemplo). El controlador de vista solamente será reemplazado cuando se termina la precarga.

Estoy notando el mismo problema en mi aplicación. Alguien tiene sugerencias para evitar este problema?

En mi caso, estoy empujando el MPMoviePlayerViewController a la interfaz de usuario como una ventana emergente modal.

// 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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top