Полноэкранная причуда MPMoviePlayerController в iPad

Я хочу показать MPMoviePlayerController в контроллере представления и позволить пользователю переключить полный экран со средствами управления по умолчанию, как приложение YouTube. Я использую следующий код в базовом примере:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.player = [[MPMoviePlayerController alloc] init];
    self.player.contentURL = theURL;
    self.player.view.frame = self.viewForMovie.bounds;
    self.player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.viewForMovie addSubview:player.view];
    [self.player play];
}

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

screenshot

Я работаю с шаблоном Tab Bar Application для iPad. Я только добавил viewDidLoad выше, переменные представления и UIView в XIB для показа проигрывателя фильмов.

Что я делаю неправильно?

13
задан Vinodh 20 May 2013 в 09:05
поделиться

4 ответа

Может ли shouldAutorotateToInterfaceOrientation: interfaceOrientation возвращать ДА для всех поддерживаемых ориентаций?

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

Если бы вы предоставили больше кода, это помогло бы.

2
ответ дан 2 December 2019 в 01:49
поделиться

Вы используете построитель интерфейсов для своего пользовательского интерфейса? в этом случае убедитесь, что вы установили ориентацию вида на «альбомную» в инспекторе атрибутов вида.

1
ответ дан 2 December 2019 в 01:49
поделиться

Была та же проблема, просто потратил полдня, разбирая ее. С iPad в портретной ориентации, всякий раз, когда я запускал видео, используя образец кода (или любой другой, который я мог найти в сети), видео и панель управления были отформатированы для портретной ориентации и, следовательно, повсюду на экране.

Во всяком случае, у меня работает следующее.

  /* Call the code like below:
        int iLandscape;
        if( newOrientation==UIInterfaceOrientationLandscapeLeft || newOrientation==UIInterfaceOrientationLandscapeRight )
             iLandscape=1;

        [self PlayVideo:iLandscape fullscreen:1]
    */
        //////////////////////////////////////////////////////////////////////////
        - (void)PlayVideo:(int)iLandscape fullscreen:(int)iFullScreen 
        {
            NSString *url = [[NSBundle mainBundle] pathForResource:@"myvideofile" ofType:@"m4v"];

        if( iFullScreen==0 )
        {
            MPMoviePlayerController *player2 = 
                [[MPMoviePlayerController alloc] 
                    initWithContentURL:[NSURL fileURLWithPath:url]];

            [[NSNotificationCenter defaultCenter] 
                addObserver:self
                   selector:@selector(movieFinishedCallback:)
                       name:MPMoviePlayerPlaybackDidFinishNotification
                     object:player2];

            //---play partial screen---
            player2.view.frame = CGRectMake(0, 0, m_iScreenWidth, m_iScreenHeight);
            [self addSubview:player2.view];
            //---play movie---
            [player2 play];
        }   
        else
        {
            MPMoviePlayerViewController *playerViewController = [[MPMoviePlayerViewController alloc] 
                initWithContentURL:[NSURL fileURLWithPath:url]];

            [[NSNotificationCenter defaultCenter] 
                addObserver:self
                   selector:@selector(movieFinishedCallback:)
                       name:MPMoviePlayerPlaybackDidFinishNotification
                     object:[playerViewController moviePlayer]];

            if( iLandscape )
            {
                playerViewController.view.frame = CGRectMake(0, 0, m_iScreenWidth, m_iScreenHeight);
            }
            [self addSubview:playerViewController.view];
            //play movie
            MPMoviePlayerController *player = [playerViewController moviePlayer];
            player.scalingMode=MPMovieScalingModeAspectFit;
            [player play];
        }
    }


    //////////////////////////////////////////////////////////////////////////
    - (void) movieFinishedCallback:(NSNotification*) aNotification 
    {
        MPMoviePlayerController *player = [aNotification object];
        [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player];    
        [player autorelease];    
        [player.view removeFromSuperview];
    }
1
ответ дан 2 December 2019 в 01:49
поделиться

Вы решили эту проблему?

[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationPortrait animated:NO];

Этот код может вам помочь.

0
ответ дан 2 December 2019 в 01:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: