2010-04-21 9 views
5

3.2 iPhone OS SDK'dan bu yana, video oynatmak gerçekten farklı.iPhone - Hem 3,0 hem de 4,0 OS/SDK'da bir video oynatın mı?

Bu yüzden, iki durum için kod yazmadan, uyumlu bir kodla (ikisi de < ve> 3.2) tam ekranda video oynatmanın bir yolu olup olmadığını merak ediyordum. Ben video çalma taşıma bizim sınıfların 2 versiyonlarını yazmak gerekecek düşünüyorum

...

Thy!

cevap

2

Jeff Kelly yukarıda not Yukarıda instancesRespondToSelector çağrıyı 3.1 üzerinde çalışan ve öneriyor temelde ne: daha sonra daha sonra

// 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 

ve moviePlayBackDidFinish işlevi Bildirimleri kaldırmak için aynı tekniği kullanıyorum.

-1

# if/# else/# endif bloğunu kullanmanız ve belirli O/S düzeyi için doğru yürütülebilirliğe sahip bir Evrensel Binary'yi derlemeniz gerekebilir.

+2

Önişlemci gibi makroları kullanmak, Active SDK'nın ayarladığı her şeyi yapma etkisine sahip olacaktır. Uygulamayı derlediğinizde, hem 3.1.3 hem de iPhone SDK'nın daha sonraki bir sürümünü hedefliyorsanız, uygulamayı 3.1.3 ayarlarıyla derler ve aynı ikili hem OS sürümleri için kullanılır. Genel olarak, çalışma zamanı iç gözlemi (ör., Eğer ([SomeClass responseToToSelector: @selector (someSelector)])) tercih edilir. –

0

Bunun için bir olasılık bir yardımcı yönteme sahip olmaktır. Bu sayede sadece bir kez yazmanız ve her yerde bu yeteneğe sahip olmanız gerekir.

Yardımcı yöntemin kendisini yazmak için, MPMoviePlayerViewController'ın kullanılabilir olup olmadığını kontrol etmek isteyeceksiniz. Öyleyse, bunu kullanın ve tam ekranı sunun. Aksi takdirde sadece normal MPMoviePlayerController kullanın.

Yani temel çerçeve olacaktır:

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