iOS с помощью MPMoviePlayerViewController в полноэкранном режиме (iPad) - PullRequest
3 голосов
/ 27 октября 2010

У меня есть одно приложение просмотра с 5 кнопками, и когда одна из кнопок нажата, проигрыватель перемещается вверх по исходному виду и начинает воспроизведение видео в полноэкранном режиме (как и должно быть).

Все прекрасно работает, за исключением нажатия значка «Полноэкранный режим / сворачивание» (две диагональные стрелки, указывающие друг на друга рядом с элементами управления воспроизведением).При нажатии этой кнопки исходный вид с пятью кнопками скользит вверх по видеоплееру.Проблема в том, что видео все еще воспроизводится в исходном виде.Я бы очень хотел убрать значок «Полноэкранный режим / свернуть», но, насколько я понимаю, это не представляется возможным.Итак ... Я думаю, я мог бы использовать наблюдателя для прослушивания, когда нажата иконка Полноэкранный режим / Свернуть, и я могу делать то, что мне нужно.Я просто не могу найти ничего солидного о том, как это сделать.Любая помощь / направление будет принята с благодарностью.

Вот мой текущий код ...

-(IBAction)playvideo {

 NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Megamind" ofType:@"mov"]];
 MPMoviePlayerViewController * playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

 [self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController];

 playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
 [playerController.moviePlayer play];
 [playerController release];
 playerController=nil;
}

- (void)moviePlayerWillExitFullscreen:(NSNotification *)theNotification {

 MPMoviePlayerController *playerController = [theNotification object];
 [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(moviePlayerWillExitFullscreen:)
             name:MPMoviePlayerWillExitFullscreenNotification
              object:nil];

 [playerController stop];
 [self dismissMoviePlayerViewControllerAnimated];
}

Ответы [ 4 ]

2 голосов
/ 01 марта 2011

Эта строка вызывает у вас такое поведение.

[self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController];

Это очень похоже на ваш обычный метод presentModalViewController.

Представляет Movieplayer и его контроллер просмотра Модально. Таким образом, настройки по умолчанию здесь

movieplayer.controlStyle = MPMovieControlStyleFullScreen

, которые установлены по умолчанию.

Поэтому, когда вы нажимаете эти диагональные стрелки, он выходит из этого режима и выдает уведомление об этом. Но сначала вы должны настроить наблюдателя для прослушивания этого уведомления, как вы сделали для фильма «Закончено».

Вы сделали

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

Это добавляет уведомление для наблюдения за уведомлениями о завершении фильма. Для выхода из полноэкранного режима добавьте еще одного наблюдателя, который будет ..

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieExitFullScreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];

И вам стоит пойти после добавления селектора -(void) movieExitFullScreen:(NSNotification *) для того же самого. Надеюсь, поможет. :)

1 голос
/ 23 апреля 2011

Я думаю, что вы добавляете наблюдателя в метод, в который хотите его УДАЛИТЬ.

Вы хотите это

MPMoviePlayerController *playerController = [theNotification object]; 
[[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(moviePlayerWillExitFullscreen:)
         name:MPMoviePlayerWillExitFullscreenNotification
          object:nil];

в playVideo ()

и ЭТО

[[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:name:MPMoviePlayerWillExitFullscreenNotificationn
                                                  object:nil];

в методе moviePlayerWillExitFullscreen.

1 голос
/ 27 октября 2010

Поместите эту строку сразу после инициализации MPMoviePlayer:

[[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(moviePlayerWillExitFullscreen:)
             name:MPMoviePlayerWillExitFullscreenNotification
              object:nil];
0 голосов
/ 27 октября 2010

Я нашел решение, и мое отсутствие знаний поставило меня в ситуацию, когда я не до конца понимаю, почему это так работает. Приношу свои извинения за отсутствие основательных рассуждений. В моем исходном коде ... MPMoviePlayerWillExitFullscreenNotification не отвечал на нажатия. Это верно и для MPMoviePlayerDidExitFullscreenNotification. Отвечал MPMoviePlayerPlaybackDidFinishNotification. Вот рабочий код, зная, что MPMoviePlayerPlaybackDidFinishNotification работал и также применялся к полноэкранным / встраиваемым печатям.

-(IBAction)playvideo {

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Megamind" ofType:@"mov"]];
MPMoviePlayerViewController * playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

[self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController];

playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[playerController.moviePlayer play];
[playerController release];
playerController=nil;
NSLog(@"playvideo");
}

- (void)movieFinishedPlayback:(NSNotification*)notification {

            MPMoviePlayerController *playerController = [notification object];
            [playerController pause];
            [self dismissMoviePlayerViewControllerAnimated];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...