2015-01-05 4 views
4

Слишком много вопросов, связанных с проблемой ландшафта в MPMovieplayer. Мое приложение в портретном режиме. Но я хочу видео в ландшафтном режиме. У меня уже есть функция пейзажа/портрета для видео. Я использую следующий код:MPInlineVideoFullscreenViewController и AVFullScreenViewController впервые приходит в портретном режиме

static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS7 = @"MPInlineVideoFullscreenViewController"; 
static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS8 = @"AVFullScreenViewController"; 

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    if ([[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS7)] || 
    [[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS8)]) 
{ 

    return UIInterfaceOrientationMaskAllButUpsideDown; 
} 
else { 
    return UIInterfaceOrientationMaskPortrait; 
} 

}

Кодекс работает отлично в обоих прошивкой 7 и iOS8. Но проблема в том, что видео сначала открывается в портретном режиме, когда устройство находится в ландшафтном режиме. После изменения ориентации, чем приложение работает нормально.

Заранее благодарен.

+0

Есть ли способ вызова вручную следующий метод: - (NSUInteger) применение: (UIApplication *) применение supportedInterfaceOrientationsForWindow: (UIWindow *) окно или любым другим способом, чтобы обновить ориентацию mpmovieplayer manually.So это будет решить мою проблему. – Bond

+1

вы можете попробовать под кодом, [[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated: NO]; [[self view] setBounds: CGRectMake (0, 0, 480, 320)]; [[self view] setCenter: CGPointMake (160, 240)]; [[self view] setTransform: CGAffineTransformMakeRotation (M_PI/2)]; Поместите выше код при воспроизведении видео. Вышеуказанный код предназначен для размера экрана iPhone 4, измените значение в соответствии с размером экрана вашего устройства. –

+0

@sundeep Я добавляю приведенный выше код к методу, когда запускается уведомление о начале видео. Но неудача его не работает на моем конце. Экран видео не вращается. – Bond

ответ

2

После долгого времени R & D и разные подходы и расходы 2-3 дня. Наконец, я получил ответ с помощью своего друга. Если наш контроллер просмотра находится в портретном режиме, чем следующий код не может нажать просмотр игрока в ландшафтном представлении.

static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS7 = @"MPInlineVideoFullscreenViewController"; 
static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS8 = @"AVFullScreenViewController"; 

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    if ([[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS7)] || 
[[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS8)]) 
{ 
    return UIInterfaceOrientationMaskAllButUpsideDown; 
} 
else { 
return UIInterfaceOrientationMaskPortrait; 

}

В моем случае проблема в том, что мой UIWebView контейнер вид контроллера очень много времени приходит в портретной mode.I не знаю, после того, как толчок ViewController в UINavigationController следующие методы ориентации не призывали к этой ViewController.

-(BOOL)shouldAutorotate; 
-(NSUInteger)supportedInterfaceOrientations; 

Чтобы решить эту проблему, я добавлю следующий код в методе ViewDidLoad

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft]; 
[[UIDevice currentDevice] setValue:value forKey:@"orientation"]; 

И в следующем коде в viewWillDisappear

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait]; 
[[UIDevice currentDevice] setValue:value forKey:@"orientation"]; 

Приведенный выше код, наконец, решить мою проблему.

Спасибо всем, кто помог мне решить эту проблему.

+1

@tomDev Вы можете исправить это предупреждение, заменив имя метода следующим образом: - приложение (UIInterfaceOrientationMask): (UIApplication *) приложение поддерживаетсяInterfaceOrientationsForWindow :(UIWindow *) window' – polterfest

+0

Кто-нибудь нашел способ реализовать это на Swift? – tomDev

+1

Как насчет iOS9 и iOS10? – User9527

 Смежные вопросы

  • Нет связанных вопросов^_^