Итак, у меня есть проблема с приложением, которое я создаю, и я не могу понять.
Моя заявка имеет следующую структуру:
UITabBarController -> UIViewController -> UIViewController
Последний контроллер представления содержит UIWebView, который загружает всю страницу. На этой странице есть фильм (mp4), который пользователи могут воспроизводить после нажатия большой кнопки воспроизведения.
Приложение сделано так, что оно работает в портретном режиме, и я никак не могу запустить его из-за своего первоначального дизайна.
Чего я хочу добиться, так это позволить пользователям поворачивать свои телефоны после начала воспроизведения фильма и соответствующим образом вращать его. Мне удалось «обнаружить», когда фильм воспроизводится, прослушивая различные NSNotifications, которые отправляет NSNotificationsCenter.
Я использовал это для определения начала:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieIsPlaying:)
name:@"UIMoviePlayerControllerDidEnterFullscreenNotification"
object:nil];
и это для определения конца:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieStopedPlaying:)
name:@"UIMoviePlayerControllerDidExitFullscreenNotification"
object:nil];
Теперь с помощью двух селекторов я установил для одной глобальной переменной значение YES или NO, которое можно использовать позже в
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
Если я всегда возвращаю ДА из вышеприведенного метода, мой интерфейс приложения вращается на вечном экране, за исключением случаев, когда фильм запущен и работает. Самое странное это:
- Я открываю приложение в портретном режиме.
- Перейти на нужную страницу (см. Мою структуру выше)
- Повернуть телефон в альбомную ориентацию (интерфейс вращается - это только для отладки)
- Я запускаю фильм (он запускается в пейзаже! Черт!)
- Я поворачиваю телефон обратно в портрет (фильм вращается! Снова ужас!)
- Я поворачиваю телефон обратно в альбомную ориентацию (вращение больше не происходит ...)
Также, если я начну фильм в портретном режиме, он никогда не будет вращаться.
Так что, пожалуйста, ребята, дайте мне знать, если вы можете мне как-нибудь помочь. Я действительно в отчаянии. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Спасибо!
Обновление
В конце концов, я пришел к этому решению для двух методов, упомянутых выше:
- (void)movieIsPlaying:(NSNotification *)notification
{
if (![Globals canRotateInterface]) {
[Globals setCanRotateInterface:YES];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
[[[[notification object] view] window] setBounds:CGRectMake(0, 0, 480, 320)];
[[[[notification object] view] window] setCenter:CGPointMake(160, 240)];
[[[[notification object] view] window] setTransform:CGAffineTransformMakeRotation(M_PI / 2)];
}
}
- (void)movieStopedPlaying:(NSNotification *)notification
{
if ([Globals canRotateInterface]) {
[Globals setCanRotateInterface:NO];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
[[[[notification object] view] window] setBounds:CGRectMake(0, 0, 320, 480)];
[[[[notification object] view] window] setTransform:CGAffineTransformIdentity];
// Little hack to force an orientation rotation so that all elements get their original size and place (eg. Navigation bar)
UINavigationController *dummyNavigationViewController = [[UINavigationController alloc] init];
[self presentModalViewController:dummyNavigationViewController animated:NO];
[self dismissModalViewControllerAnimated:NO];
[dummyNavigationViewController release];
}
}