Возврат к портрету после нажатия кнопки «Готово» на видеоплеере? - PullRequest
1 голос
/ 13 сентября 2011

У меня работает MPMoviePlayer.Он предназначен для показа фильма размером с почтовую марку в качестве подпредставления в представлении.Когда телефон поворачивается в горизонтальный режим, он переходит в полноэкранный режим.И когда телефон находится в портретном режиме, он переходит в портретный режим почтовой марки.

Единственная проблема заключается в том, что когда я нажимаю Готово в альбомном режиме, он остается в альбомной ориентации с фильмом размером с почтовую марку вместообратно в портрет ..

Вот мой код:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 


    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation ==  UIInterfaceOrientationLandscapeLeft) {
        [moviePlayerController setFullscreen:YES animated:YES];
    } else
    {
        [moviePlayerController setFullscreen:NO animated:YES];

    }


}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{

        return interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft;

}

Как заставить его перейти в портретный режим после нажатия кнопки "Готово"?

Ответы [ 4 ]

2 голосов
/ 25 февраля 2014

@ cannyboy ... вам просто нужно использовать метод ниже в вашем APPDelegate.m, если ваше приложение работает только в портретном режиме

- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if ([[window.rootViewController presentedViewController] isKindOfClass:[MPMoviePlayerViewController class]])
{
    //NSLog(@"in if part");
    return UIInterfaceOrientationMaskAllButUpsideDown;
}
else
{
    //NSLog(@"in else part");
    return UIInterfaceOrientationMaskPortrait;
}}
1 голос
/ 25 февраля 2014

У меня была такая же проблема, и теперь я рассказываю, как я ее решил.Я не знаю, является ли приведенный ниже метод правильным или неправильным, но он работает нормально.

  • Вместо открытия MPMoviePlayer в открытии откройте его в новом viewController.Я имею в виду создать новый UIViewController, чтобы показать фильм, и нажать его как-нибудь так, чтобы пользователь не понял, что они перенаправляют на новый экран.
  • Отключите родительский экран для ландшафтного режима и разрешите MovieViewControllerв альбомную ориентацию.
  • Когда пользователь нажимает кнопку «Готово» или кнопку «Закрыть», просто pop viewController, и, как на предыдущем экране, не поддерживается альбомный режим, поэтому экран автоматически отображается в портретном режиме.
0 голосов
/ 01 июня 2012
[[NSNotificationCenter defaultCenter] addObserver:self
                                  selector:@selector(_moviePlayerWillExitFullscreen:)
                                         name:MPMoviePlayerWillExitFullscreenNotification object:nil];


- (void)_moviePlayerWillExitFullscreen:(NSNotification *)notification 
{
    CGFloat ios = [[[UIDevice currentDevice] systemVersion] floatValue];
    CGFloat min = 5.0;
    if (ios >= min)
    {
        if (self.interfaceOrientation != UIInterfaceOrientationPortrait)
        {  
            if([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait])
            {
                [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];
                [self willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
                [UIViewController attemptRotationToDeviceOrientation];
            } 
        }
    }   
}

Обратите внимание, что это работает только в ios 5.0 и новее, и вы получите предупреждение о том, что setOrientation не поддерживается, но работает довольно хорошо

0 голосов
/ 14 сентября 2011

Один из способов, которым вы можете попытаться, - заставить ваше устройство думать, что оно находится в портретном режиме. Для этого попробуйте использовать:

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait];

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

...