2010-04-21 13 views
5

Dal momento che 3.2 OSK per iPhone OS, la riproduzione di un video è molto diversa.iPhone - Riproduzione di un video su OS/SDK 3.0 e 4.0?

Quindi mi chiedevo se c'è un modo per riprodurre i video a schermo intero con un codice compatibile (sia < e> 3.2) senza scrivere codice per i due casi.

Penso che saremo costretti a scrivere 2 versioni dei nostri corsi di movimentazione riproduzione video ...

Thy!

risposta

2

faccio fondamentalmente ciò che Jeff Kelly suggerisce sopra per funzionare su 3.1 e superiore, nota la chiamata 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 

e poi più tardi nel Funzione moviePlayBackDidFinish Uso la stessa tecnica per rimuovere le notifiche.

-1

Potrebbe essere necessario utilizzare # if/# else/# blocchi endif e compilare un binario universale che ha l'eseguibile corretto per il particolare livello O/S.

+2

L'utilizzo di macro di preprocessore come questa avrà l'effetto di eseguire qualsiasi azione su cui è impostato l'SDK attivo. Quando si compila l'app, se si sceglie come target, ad esempio, sia la 3.1.3 sia una versione successiva dell'iPhone SDK, verrà compilata l'app con le impostazioni 3.1.3 e lo stesso binario verrà utilizzato per entrambe le versioni del sistema operativo. In generale, l'introspezione run-time (ad esempio 'if ([SomeClass respondsToSelector: @selector (someSelector)])) è preferita. –

0

Una possibilità è avere un metodo di supporto per questo. In questo modo dovrai scrivere solo una volta e avere questa capacità ovunque.

Per scrivere il metodo di supporto stesso, è necessario verificare se MPMoviePlayerViewController è disponibile. In tal caso, utilizzalo e quindi presentalo a schermo intero. Altrimenti usa semplicemente il normale MPMoviePlayerController.

Così il quadro di base sarebbe:

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