2015-07-01 4 views
3

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

У меня есть ViewControllerA в режиме Potrait и ViewControllerB в ландшафтном режиме. Когда устройство меняется с покрова на пейзаж, я вижу ViewControllerB открытие в ландшафтном режиме, но когда устройство повернуто обратно в режим покера, отображается ViewControllerA, но все же в ландшафтном режиме. Может ли кто-нибудь помочь мне понять, как я могу отобразить его обратно в режиме potrait?

Я попытался следующие вещи, но ничего не работает для меня:

Добавлен следующий код в ViewControllerA в viewWillAppear:

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]; 

Добавили также следующие функции в этой точке зрения контроллера:

- (BOOL)shouldAutorotate 
{ 
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationPortrait; 
} 

ответ

1

Надеется, что это поможет вам с помощью supportedInterfaceOrientationsForWindow

Appdelegate.h

@property() BOOL restrictRotation; 

в Appdelegate.m

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    //restrictRotation is BOOL value 
    if(self.restrictRotation)//set the bool value to view controller which you want to load in landscape 
      return UIInterfaceOrientationMaskLandscape; 
    else 
     return UIInterfaceOrientationMaskAll; 
} 

// называют это где вам нужно

requiredViewController.m

-(void) restrictRotation:(BOOL) restriction 
{ 

    appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; 
    appDelegate.restrictRotation = restriction; 
} 

// В ViewdidLoad()

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self restrictRotation:YES];//Set YES if required in Landscape mode 
} 
+0

Спасибо за ваш ответ. У меня уже есть это в appdelegate. вместо UIInterfaceOrientationMaskAll Я определил UIInterfaceOrientationMaskPortrait. –

+0

Большое спасибо. Ваше предложение решило мою проблему. я просто понял, что я не устанавливаю переменную BOOL (isVideoView в моем случае) в NO, прежде чем переходить из ViewControllerB в ViewControllerA. Теперь я вижу ViewControllerA в режиме potrait, но единственная проблема заключается в том, что он не идеален в том смысле, что изображение кажется искаженным. Есть ли у вас какие-либо идеи? –

+0

приветствую ..... Вам нужно обработать изображение с изображением рамки w.r.t ориентации .. – Sujania

0

Попробуйте

[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"]; 
+0

Спасибо за ответ, я поместил его в viewWillAppear, но не использовал .. :( –

+0

Попробуйте поместить его в viewWillDisappear в ViewControllerB. Я предполагаю, что вы открываете ViewControllerA после ViewControllerB. – aobs

+0

Пробовал это тоже, но он не работал –

-1

Использование ниже кода

-(void) viewDidAppear:(BOOL)animated 
{ 
[UIViewController attemptRotationToDeviceOrientation]; 
[super viewDidAppear:animated]; 
} 

& также в viewWIllAppear написать

[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"] 
+0

Спасибо за предложение. tryRotationToDeviceOrientation сделал трюк, но так как я вызываю это в viewDidAppear, так что есть задержка в переходе от пейзажа к potrait, я вижу вид в ландшафтном режиме, а затем он поворачивается обратно в potrait. Но я хочу, чтобы он мгновенно перешел в режим движения. Однако я не знал об этом. Еще раз спасибо! –

+0

проголосовать или принять ответ. Если это вам помогло. – poojathorat

+0

есть еще один ответ, который полностью разрешил мою проблему, к сожалению, нет возможности проголосовать за обоих! –