2010-04-21 2 views
5

Начиная с 3.2 iPhone OS SDK, воспроизведение видео действительно отличается.iPhone - Воспроизведение видео на 3,0 и 4.0 ОС/SDK?

Так что мне было интересно, есть ли способ сделать видеозапись в полноэкранном режиме с совместимым кодом (оба < и> 3.2) без написания кода для двух случаев.

Я думаю, что мы должны написать 2 версии наших классов обработки видео игры ...

твой!

ответ

2

я в основном то, что выше Джефф Келли предлагает работать на 3,1 и выше, обратите внимание на 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 

, а затем позже в Функция moviePlayBackDidFinish Я использую тот же метод для удаления уведомлений.

-1

Возможно, вам придется использовать # if/# else/# endif блоки и скомпилировать Universal Binary, который имеет правильный исполняемый файл для определенного уровня O/S.

+2

Использование таких макросов препроцессора, как это сделало бы то, что установлено для активного SDK. Когда вы компилируете приложение, если вы используете таргетинг, скажем, как 3.1.3, так и более позднюю версию iPhone SDK, он скомпилирует приложение с настройками 3.1.3, и тот же двоичный файл будет использоваться для обеих версий ОС. В общем, предварительная интроспекция времени выполнения (например, 'if ([SomeClass отвечаетSoSelector: @selector (someSelector)])) является предпочтительной. –

0

Одна из возможностей - иметь вспомогательный метод для этого. Таким образом, вам нужно будет только написать один раз и использовать эту возможность повсюду.

Чтобы написать сам метод-помощник, вы захотите проверить, доступен ли MPMoviePlayerViewController. Если это так, используйте это, а затем представите этот полноэкранный режим. В противном случае просто используйте обычный MPMoviePlayerController.

Так основная структура будет:

-(void)playMovie:(NSURL *)movieURL 
{ 
    Class mpVC = NCClassFromString("MPMoviePlayerViewController"); 
    if(mpVC) 
    { 
     // Generate MPPlayerViewController here and use accordingly 
    } 
    else 
    { 
     // Generate MPPlayerController here and use accordingly 
    } 
} 
Смежные вопросы