У меня есть MPMoviePlayerController
объект, который воспроизводит видео в полноэкранном режиме в книжной или альбомной ориентации. Если я поворачиваю ориентацию во время воспроизведения видео и выполняю поворот в течение нескольких секунд после начала воспроизведения видео, и отображается строка состояния видео, когда видео заканчивается, моя навигационная панель в порядке. Но если я подожду, пока строка состояния видео не исчезнет на несколько секунд во время воспроизведения видео, а затем поверну ориентацию, когда видео закончится, мой navigationBar
будет частично скрыт за строкой состояния, как нажатие вверх.
Вы когда-нибудь видели что-то подобное?
Я могу легко воссоздать эту ошибку. Я создал новое приложение Single View и просто добавил кнопку и панель навигации. Если я поворачиваю ориентацию во время воспроизведения видео, нажмите, чтобы включить полноэкранный режим, и строка состояния видео все еще видна, когда видео заканчивается, все в порядке. Но если я жду поворота после исчезновения строки состояния видео, когда я поворачиваюсь и видео заканчивается, панель навигации находится под строкой состояния. Смотрите изображение:
Изображение iPhone
Вот простой код, который я использую:
- (void) playMovie {
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource: @"movie" ofType: @"mov"]];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: url];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(moviePlayBackDidFinish:)
name: MPMoviePlayerPlaybackDidFinishNotification
object: moviePlayer];
moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;
[self.view addSubview: moviePlayer.view];
[moviePlayer setFullscreen: YES animated: YES];
- (void) moviePlayBackDidFinish: (NSNotification *) notification
MPMoviePlayerController *player = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver: self
name: MPMoviePlayerPlaybackDidFinishNotification
object: player];
if ([player respondsToSelector: @selector(setFullscreen:animated:)])
{
[player.view removeFromSuperview];
}
Вот где я сейчас нахожусь с предложениями, приведенными ниже. У меня должно быть что-то не так, потому что, к сожалению, у меня все та же проблема.
Вот метод onPlayerWillExitFullScreen
UIView *view = [[[UIApplication sharedApplication] delegate].window.subviews lastObject];
if (view) {
[view removeFromSuperview];
[[[UIApplication sharedApplication] delegate].window addSubview:view];
}
MPMoviePlayerController *player = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver: self
name: MPMoviePlayerWillExitFullscreenNotification
object: player];
и вот мой текущий playMovie
метод:
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource: @"movie" ofType: @"mov"]];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: url];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(moviePlayBackDidFinish:)
name: MPMoviePlayerPlaybackDidFinishNotification
object: moviePlayer];
[[NSNotificationCenter defaultCenter]addObserver: self
selector: @selector(onPlayerWillExitFullScreen:)
name: MPMoviePlayerWillExitFullscreenNotification
object: self.moviePlayer];
moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;
[self.view addSubview: moviePlayer.view];
[moviePlayer setFullscreen: YES animated: YES];