У меня есть приложение для iPhone (iOS6 +), которое поддерживает все ориентации интерфейса. Тем не менее, только поддержка ландшафта должна поддерживаться, когда MPMoviePlayerController воспроизводит полноэкранный режим видео.
Я нашел следующее решение в Qaru и работает.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillEnterFullscreenNotification:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillExitFullscreenNotification:) name:MPMoviePlayerWillExitFullscreenNotification object:nil];
...
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if (self.landscapeOnlyOrientation) {
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
return UIInterfaceOrientationMaskAll;
}
- (void)moviePlayerWillEnterFullscreenNotification:(NSNotification*)notification {
self.landscapeOnlyOrientation = YES;
}
- (void)moviePlayerWillExitFullscreenNotification:(NSNotification*)notification {
self.landscapeOnlyOrientation = NO;
}
Однако сохраняется раздражающая проблема, а именно: если видео выходит из полноэкранного режима в портретной ориентации (после воспроизведения в вынужденном ландшафте), основной вид не поворачивается назад. Мне нужно вручную повернуть устройство в альбомную и обратно в портрет, чтобы инициировать обновление ориентации. Есть ли способ, с помощью которого я могу запускать этот вид обновления программно?
Следующий набор скриншотов должен иллюстрировать, что я имею в виду:
NB: По разным причинам использование MPMoviePlayerViewController невозможно.