iOS: Как изменить ориентацию MPMoviePlayerViewController на iPad?
Я работаю над универсальным приложением, которое начинается с очень короткого вступительного видео. Поэтому я просто добавляю MPMoviePlayerViewController и представляю его модально. На айфоне все работает нормально, даже если я играю видео в альбомном режиме. Но на iPad видео всегда воспроизводится в портретном режиме, независимо от ориентации интерфейса устройства. Я искал часы и пробовал много разных вещей, таких как CGAffineTransformation или добавление нового представления, но ничего не помогло. Вот код, с которым я работаю:
NSString *filePath = [[NSBundle mainBundle] pathForResource:videoName ofType:@"mp4"];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
self.startupController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL];
[self.startupController.moviePlayer setControlStyle:MPMovieControlStyleNone];
[self.startupController.moviePlayer setScalingMode:MPMovieScalingModeAspectFit];
[self.startupController.moviePlayer setFullscreen:YES];
[self presentModalViewController:self.startupController animated:NO];
У вас есть идеи, как я могу решить эту проблему? На мой взгляд, это должна быть простая функция, предлагаемая Apple, но иногда самые простые вещи, о которых мне нужно беспокоиться больше всего...
1 ответ
Вот как я это сделал. Сначала прослушайте это уведомление
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(detectOrientation) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
Затем выполните это:
- (void)detectOrientation {
NSLog(@"handling orientation");
[self setMoviePlayerViewOrientation:[[UIDevice currentDevice] orientation]];
}
- (void)setMoviePlayerViewOrientation:(UIDeviceOrientation)orientation {
if (lwvc != nil)
return;
if (moviePlayerController.playbackState == MPMoviePlaybackStateStopped) return;
//Rotate the view!
CGFloat degree = 0;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.1];
switch (orientation) {
case UIDeviceOrientationPortrait:
case UIDeviceOrientationPortraitUpsideDown:
degree = 0;
moviePlayerController.view.bounds = CGRectMake(0, 0, 320, height);
break;
case UIDeviceOrientationLandscapeLeft:
degree = 90;
moviePlayerController.view.bounds = CGRectMake(0, 0, height, 320);
break;
case UIDeviceOrientationLandscapeRight:
degree = -90;
moviePlayerController.view.bounds = CGRectMake(0, 0, height, 320);
break;
default:
break;
}
lastOrientation = orientation;
CGAffineTransform cgCTM = CGAffineTransformMakeRotation((degree) * M_PI / 180);
moviePlayerController.view.transform = cgCTM;
[UIView commitAnimations];
[[UIApplication sharedApplication] setStatusBarOrientation:orientation];
}
Так что хитрость заключается в использовании преобразования