2010-04-21 15 views
5

Desde 3.2 iPhone OS SDK, reproducir un video es realmente diferente.iPhone - ¿Reproduce un video en OS/SDK 3.0 y 4.0?

Me preguntaba si hay una manera de hacer que el video se reproduzca en pantalla completa con un código compatible (ambos < y> 3.2) sin escribir código para los dos casos.

creo que vamos a tener que escribir 2 versiones de nuestras clases de manejo de la reproducción de vídeo ...

Tu!

Respuesta

2

hago básicamente lo que Jeff Kelly anterior sugiere que se ejecutan en 3.1 y superior, tenga en cuenta la llamada instancesRespondToSelector:

// Initialize a movie player object with the specified URL 
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 
if (mp) 
{ 

    // Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayBackDidFinish:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:nil]; 


    //Will only run this code for >= OS 3.2 
    if ([MPMoviePlayerController instancesRespondToSelector:@selector(setFullscreen:animated:)]){ 

     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(moviePlayBackStateDidChange:) 
                name:MPMoviePlayerPlaybackStateDidChangeNotification 
                object:nil]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(nowPlayingMovieDidChange:) 
                name:MPMoviePlayerNowPlayingMovieDidChangeNotification 
                object:nil]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(moviePlayBackDidFinish:) 
                name:MPMoviePlayerDidExitFullscreenNotification 
                object:nil]; 

     mp.controlStyle = MPMovieControlStyleFullscreen; 


     [mp setScalingMode:MPMovieScalingModeAspectFit]; 

        //change mainMenu here to whatever your parent view is 
     [mp.view setFrame:mainMenu.frame]; 
     [self.view addSubview:mp.view]; 



     [mp setFullscreen:YES animated:NO]; 
    } 
//continue as normal 

y luego más tarde en el Función moviePlayBackDidFinish Utilizo la misma técnica para eliminar las notificaciones.

-1

Puede que tenga que usar bloques # if/# else/# endif y compilar un binario universal que tenga el ejecutable correcto para el nivel de O/S particular.

+2

El uso de macros de preprocesador como este tendrá el efecto de hacer lo que sea que esté configurado el Active SDK. Cuando compile la aplicación, si está segmentando, digamos, 3.1.3 y una versión posterior del iPhone SDK, compilará la aplicación con la configuración 3.1.3 y se usará el mismo binario para ambas versiones del sistema operativo. En general, se prefiere la introspección en tiempo de ejecución (por ejemplo, 'if ([SomeClass respondsToSelector: @selector (someSelector)])'). –

0

Una posibilidad es tener un método de ayuda para esto. De esta forma, solo tendrá que escribir una vez y tener esta capacidad en todas partes.

Para escribir el método de ayuda, deseará comprobar si MPMoviePlayerViewController está disponible. Si es así, use eso y luego presente esa pantalla completa. De lo contrario, simplemente use el MPMoviePlayerController regular.

lo tanto, el marco básico sería:

-(void)playMovie:(NSURL *)movieURL 
{ 
    Class mpVC = NCClassFromString("MPMoviePlayerViewController"); 
    if(mpVC) 
    { 
     // Generate MPPlayerViewController here and use accordingly 
    } 
    else 
    { 
     // Generate MPPlayerController here and use accordingly 
    } 
} 
Cuestiones relacionadas