2013-06-01 1 views
3

Я хочу воспроизвести видео с контроллера вида. Когда я представляю его, он представлен так, как будто это портретная ориентация, поэтому просмотр поворачивает. Это происходит только на iPhone, а не на iPad.presentViewController изменяет ориентацию контроллера

Существует ViewController> MyItemsController> видеоконтроллер

enter image description here

Когда я закрыть видеоконтроллер, родитель контроллер (MyItemsController) из видео контроллера, как:

enter image description here

Раскадровки из контроллер вида:

enter image description here

И код:

-(void)playMoviesForItems:(NSArray *)shopItems{ 
    VideoPlayerViewController* moviePlayer = [self.storyboard instantiateViewControllerWithIdentifier:@"videoPlayerController"]; 
    moviePlayer.modalPresentationStyle = UIModalPresentationCurrentContext; 
    moviePlayer.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self presentViewController:moviePlayer animated:NO completion:nil]; 
} 

Я переместил код в приложение делегата:

-(void)playMoviesForItems:(NSArray *)shopItems{ 
VideoPlayerViewController* mp = [[self getStoryboard] instantiateViewControllerWithIdentifier:@"videoPlayerController"]; 
[mp playMoviesForItems:shopItems]; 
[self pauseBackgroundMusic]; 

[self.window makeKeyAndVisible]; 
[self.window.rootViewController presentViewController:mp animated:YES completion:NULL]; 
} 

На этот раз, все, кажется, хорошо. Фильм играет, я слышу звук, но не вижу видео. Зачем? enter image description here

+0

Вы хотите заблокировать приложение в определенной ориентации? – Mar0ux

+0

Я обычно запирал его Пейзаж. Но этот контроллер представлен как в iPhone. iPad нормальный. – Burak

+0

Вы исправили это? У меня такая же проблема :( –

ответ

1

Хотя принятый ответ был вниз проголосовали, так как он не дает ответа на вопрос, вот что-то, что работает на iOS9:

Метод, который вызывается, когда ViewController представлен (модально) является preferredInterfaceOrientationForPresentation. Этот метод должен возвращать ориентацию.
Вы должны проверить ориентацию докладчика и вернуть его в качестве предпочтительного:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
     UIInterfaceOrientation topOrientation = self.navigationController.visibleViewController.interfaceOrientation; 
     UIInterfaceOrientation presentingOrientation = self.presentingViewController.interfaceOrientation; 

     return presentingOrientation ? presentingOrientation : topOrientation ? topOrientation : UIInterfaceOrientationLandscapeLeft; 
} 

topOrientation содержит ориентацию видимой контроллер представления, в то время presentingOrientation является ориентацией вызываемых к presentViewController:animated... В общем, я советую вам создать «базовый» класс UIViewController и наследовать его. Таким образом, все ваши контроллеры будут пользоваться этим кодом.

0

Убедитесь, чтобы добавить эти два в ребенка контроллер вид:

- (UIInterfaceOrientationMask) supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); 
} 
+0

я уже добавил этот – Burak

+0

И 'Применение: supportedInterfaceOrientationsForWindow:' в 'AppDelegate' – Mar0ux

+0

Я добавил - (NSUInteger) применение:.? (UIApplication *) приложения supportedInterfaceOrientationsForWindow: (UIWindow *) ш { return (NSUInteger) [приложение поддерживаетсяInterfaceOrientationsForWindow: w] | (1 << UIInterfaceOrientationMaskLandscape); } но он не работает. – Burak

-1
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationMaskLandscape); 
} 

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return (UIInterfaceOrientationMaskLandscape); 
} 

Попробуйте это ...

+0

Пробовал. Не работает – Burak

+0

попробуйте это ... скажите мне результат ... – lakesh

+0

Ничего не изменилось – Burak

0

вы должны добавить методы ниже, в вашей собственной личности. window.rootViewController ':

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; 
} 


@end 

если ваш RootViewController является [класс UINavigationController], команда + п добавить категорию UINavigationController, как мой код ниже

@implementation UINavigationController (Rotation_For_iOS6) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; 
} 


@end 

, а затем перейти к viewController.m которого и хочет быть ландшафтным или портретным режим, может быть, для u ваш VideoController !!!!!! добавить методы ниже:

#pragma mark 
#pragma mark ----- Orientation Control For iOS 6/7 ----- 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; 
} 

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight||toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

Теперь я могу установить VC поддерживается для ландшафтного режима, не в последнюю очередь, убедитесь, что ваш проект Информация о развертывании выберите ориентацию ваш хотят.

1

У меня была эта точно такая же проблема несколько минут назад.

Что случилось со мной в том, что я пытался представить новую ViewController с другой ViewController, который не был в иерархии, это было только его вид добавлен в качестве subview третьего ViewController в иерархии. Чтобы исправить эту проблему, я только что сделал это последнее ViewController.

Пример того, что не делать:

UIViewController *secondController = [UIViewController alloc] init]; 
[rootViewController presentViewController:secondController animated:NO completion:nil]; 

UIViewController *controllerOutsideHierarchy = [UIViewController alloc] init]; 
[secondController.view addSubview:controllerOutsideHierarchy.view]; 

[controllerOutsideHierarchy presentViewController:thirdController animated:NO completion:nil]; 

Пример того, что должно быть сделано вместо:

UIViewController *secondController = [UIViewController alloc] init]; 
[rootViewController presentViewController:secondController animated:NO completion:nil]; 

UIViewController *controllerOutsideHierarchy = [UIViewController alloc] init]; 
[secondController.view addSubview:controllerOutsideHierarchy.view]; 

[secondController presentViewController:thirdController animated:NO completion:nil]; 

Надеется, что это помогает!

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

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