У меня есть довольно стандартное навигационное приложение для iPhone, которое я разрабатываю, где на некоторых экранах есть кнопка, которая будет воспроизводить фильм с помощью MPMoviePlayerController в полноэкранном режиме.В верхней части окна есть панель навигации.Я вижу странное поведение с изменением размера вида после воспроизведения фильма.Было интересно, видел ли кто-нибудь еще это, и есть ли исправление.Вот что я вижу:
- Я держу телефон в одной ориентации (книжная или альбомная)
- Я запускаю фильм (он воспроизводится в полноэкранном режиме)
- Я касаюсь экрана, чтобы скрыть элементы управления воспроизведением фильма
- Я поворачиваю телефон в другую ориентацию (книжная / альбомная или наоборот)
- Касаюсь экрана, чтобы вернуть элементы управления воспроизведением, а затем нажмите кнопку «Готово»
. На этом этапе исходный вид возвращается на экран в новой ориентации.Тем не менее, вид не имеет должного размера для размещения строки состояния в верхней части экрана.Строка состояния скрывает часть панели навигации.Поворот телефона в этот момент решает проблему.
Если я следую той же последовательности, но не скрывая элементов управления воспроизведением, все работает просто отлично, и исходный вид изменяется по размеру, когда я закрываю фильм.
Кто-нибудь знает, что может быть причиной этого?
Кроме того, это довольно легко воспроизвести.Я использую Xcode4.2 и 5.0 SDK.Если вы создаете новый проект только для iPhone с помощью шаблона «Приложение Master-Detail» и вносите эти изменения, вы видите, что проблема возникает:
Сначала добавьте следующий код в MasterViewController.m.
- (void) moviePlayBackDidFinish:(NSNotification*)notification
{
MPMoviePlayerController *moviePlayer = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
[moviePlayer.view removeFromSuperview];
[moviePlayer release];
}
- (void) playStory
{
NSURL *movieURL = [NSURL URLWithString:@"http://double-apps.com/thisisatest.m4v"];
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
// Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
moviePlayer.shouldAutoplay = YES;
[self.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];
}
Затем замените содержимое метода didSelectRowAtIndexPath на [self playStory]:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self playStory];
}
Вот и все, запустите приложение, нажмите запись «Подробно» на главном экране, затемследуйте приведенной выше последовательности.