0

У меня есть приложение, в котором корневой контроллер является UINavigationController. Нажмите одну кнопку, и она подтолкнет другой контроллер. Нажмите еще один, и он запускает AVCaptureSession с Overlay. Я хочу, чтобы это вид, и этот вид ТОЛЬКО был Пейзаж, а не портрет. Я просмотрел массу разных уроков, и ничего не работает.iOS с NavigationController как Root Make, One Controller ONLY Landscape

Ближайший я получил это:

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

в viewDidAppear. Однако есть некоторые проблемы. Во-первых, он сразу же возвращается к портрету. Во-вторых, другие взгляды все еще могут быть портретами и пейзажами, и я не хочу этого. Мне нужна помощь, пожалуйста.

ответ

0

В моем приложении делегат, я использую этот код и убедитесь, что выбран режим только портрет:

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    if ([self.window.rootViewController.presentedViewController isKindOfClass:[SecondViewController class]]) 
    { 
     SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController; 

     if (secondController.isPresented) 
     { 
      return UIInterfaceOrientationMaskLandscape; 
     } 
     else return UIInterfaceOrientationMaskPortrait; 
    } 
    else return UIInterfaceOrientationMaskPortrait; 
} 
0

да, вы можете сделать конкретный ViewController как пейзаж, размещая сильфон метода в AppDelegate.

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
if(self.restrictRotation) 
    return UIInterfaceOrientationMaskPortrait; 
else 
    return UIInterfaceOrientationMaskAll; 
} 

затем взять один Ее свойство в вашем AppDelegate

@property (nonatomic) BOOL restrictRotation; 

, а затем в виде контроллере, где вы хотите изменить ориентацию создать AppDelegate общего экземпляр и позволить ограничение изменить как сильфон метода

-(void) restrictRotation:(BOOL) restriction 
{ 
    AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; 
    appDelegate.restrictRotation = restriction; 
} 

теперь вызывают этот метод с вашего контроллера и изменяют ориентацию по вашему желанию.

[self restrictRotation:NO]; 

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

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

-(void)viewWillDisappear:(BOOL)animated 
{ 
    NSNumber *value = [NSNumber  numberWithInt:UIDeviceOrientationPortrait]; 
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; 
    [self restrictRotation:YES]; 
} 

Я надеюсь, что это вам поможет.