[Обновить]
Как было рекомендовано, я изменил все родительские контроллеры представления для поддержки всех ориентаций. Моя структура приложения выглядит следующим образом: AppDelegate> RootViewController> Videos> VideoDetails> MPMoviePlayerViewController.
Видео будет воспроизводиться в альбомной ориентации, если я изменю все это для поддержки всех ориентаций. Но поддержка всех ориентаций - это не то, что я хочу, и вызывает другие проблемы. Есть ли какая-нибудь другая работа или что-нибудь еще, что я могу сделать?
Спасибо
[/Обновить]
У меня есть приложение для iPhone с портретной ориентацией, которое отображает видео с использованием настраиваемого подкласса MPMoviePlayerViewController. Когда пользователь нажимает кнопку воспроизведения, я создаю экземпляр этого класса и представляю его модально следующим образом:
- (IBAction) playPressed:(id)sender {
NSString *filepath = [[NSBundle mainBundle] pathForResource:self.currentVideoModel.videoFileName ofType:@"m4v"];
NSURL *fileURL = [NSURL fileURLWithPath:filepath];
// MovieViewController is just a simple subclass of MPMoviePlayerViewController
self.moviePlayerController = [[MovieViewController alloc] initWithContentURL:fileURL];
// full screen code.
[self.moviePlayerController.moviePlayer setScalingMode:MPMovieScalingModeFill];
[self.moviePlayerController.moviePlayer setFullscreen:TRUE];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayerController];
[self presentMoviePlayerViewControllerAnimated:self.moviePlayerController];
}
Проблема в том, что он отлично работает в портретной ориентации, но когда я переворачиваю iPhone в альбомную ориентацию, видео по-прежнему воспроизводится в портретной, а не в альбомной ориентации :( Все контроллеры просмотра в приложении поддерживают только портретную ориентацию.
Мой подкласс MPMoviePlayerViewController только переопределяет следующий метод, чтобы разрешить изменение ориентации, но это не влияет:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
Я даже пытался программно повернуть видео, но безуспешно, он всегда остается в портретном режиме.
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
[self.view setTransform:CGAffineTransformMakeRotation(M_PI / 2)];
return true;
}
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
[self.view setTransform:CGAffineTransformMakeRotation(M_PI * 2)];
return true;
}
else if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {
[self.view setTransform:CGAffineTransformIdentity];
return true;
}
else return false;
}
shouldAutorotate..
и сделать его простоreturn YES;
(вы можете делать это постепенно, если вы хотите сэкономить лишние хлопоты позже). Затем переключайте их по одному обратно в портретное, пока оно не зафиксируется в портретном, и вы узнаете, какие из нихUIKit
проверяются при попытке повернуть ваш. Иди оттуда. - person   schedule 24.01.2012