Так как 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).
Спасибо за помощь