Как повернуть встроенное видео UIWebView

Итак, у меня проблема с приложением, которое я создаю, и я не могу понять. Мое приложение имеет следующую структуру:

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

. Если я всегда возвращаю YES из вышеупомянутого метода, мой интерфейс приложения вращается на каждый экран, кроме случаев, когда фильм запущен. Вот что самое странное:

  • Я открываю приложение в портретной ориентации.
  • Перехожу на нужную страницу (см. Мою структуру выше)
  • Поверните телефон в альбомную ориентацию (интерфейс вращается - это только для отладки)
  • Я запускаю фильм (запускается в альбомной ориентации! Ура!)
  • Я переворачиваю телефон обратно в портретное положение (фильм вращается! Ура снова!)
  • Я переворачиваю телефон обратно в альбомную ориентацию (вращения больше не происходит. ..)

Также, если я запускаю фильм в портретном режиме, он никогда не будет вращаться.

Так что, ребята, дайте мне знать, если вы можете мне чем-то помочь. Я действительно в отчаянии. Если вам нужна дополнительная информация, дайте мне знать.

Спасибо!

Обновление

В конце концов, я нашел решение для двух упомянутых выше методов:

- (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];
    }
}
11
задан Mihai Fratu 28 July 2011 в 07:42
поделиться