Подтвердить что ты не робот

MPMoviePlayerController переориентирует портрет на пейзаж и обратно на портрет (iOS 4.1)

Так как iOS 3.2 класс MPMoviePlayerController позволяет вставлять фильм в иерархию представлений. Теперь я столкнулся с этой проблемой: создаю свой портретный взгляд, разместив экземпляр MPMoviePlayerController. Когда пользователь прикасается к кнопке "полноэкранный режим", этот вид переходит в полноэкранный режим, но вид остается в портретном режиме. Когда пользователь поворачивает устройство, просмотр полноэкранного фильма не выполняется автоматически, так как мое приложение запрещает ориентацию ландшафтного интерфейса. Поэтому, чтобы разрешить автоматическое вращение полноэкранного просмотра видеоплеера, я изменил свой контроллер представления shouldAutorotateToInterfaceOrientation: метод вернуть YES для пейзажа, если - и только если - проигрыватель фильмов находится в полноэкранном режиме. Это прекрасно работает: когда пользователь входит в полноэкранный режим, а затем поворачивается в альбомный режим, плеер автоматически поворачивается на пейзаж и заполняет весь экран.

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    //return (interfaceOrientation == UIInterfaceOrientationPortrait);
    if(UIInterfaceOrientationIsPortrait(interfaceOrientation)) {
        return(YES);
    }

    if(UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
        return([movieController isFullscreen]);
    }

return(NO);
}

Теперь проблема возникает, когда я касаюсь кнопки "Готово" в полноэкранном режиме, оставаясь в ландшафте. Полный экран закрывается, и тогда я вижу, что мой исходный вид авторотируется: но я не хочу этого автоматического поворота.

Частичным, но неприемлемым решением является прослушивание "MPMoviePlayerDidExitFullscreenNotification" и, если интерфейс повернут в альбомный, принудительно переориентируйте его на использование недокументированной и частной функции:

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait]

Это работает, но неприемлемо, так как использование этого метода запрещено.

Я попытался принудительно настроить ориентацию с помощью [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait], но поскольку я на панели вкладок, это не работает (UITabBar остается размером с Landscape).

Спасибо за помощь

4b9b3361

Ответ 1

Вы можете использовать отдельный контроллер просмотра для MPMovieplayer. Вам не нужно переопределять

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

в исходном контроллере представления.

если вы используете MPMoviePlayerViewController, все для вас уже хорошо настроено, так как метод shouldAutorotateToInterfaceOrientation: по умолчанию возвращает YES. Вы можете использовать его в качестве подзаголовка или представить его модально, позвонив presentMoviePlayerViewControllerAnimated: