0

Ich habe eine App, in der der Root-Controller ein UINavigationController ist. Drücken Sie eine Taste, und es schiebt einen anderen View-Controller. Drücken Sie noch einmal und es startet eine AVCaptureSession mit Overlay. Ich will diese Ansicht, und diese Ansicht NUR als Landschaft und nicht als Porträt. Ich habe mir eine Menge verschiedener Tutorials angeschaut und nichts funktioniert.iOS mit NavigationController als Root Make, nur ein Controller Landschaft

Der nächstgelegene ich bekommen habe, ist:

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

im viewDidAppear. Es gibt jedoch einige Probleme. Eins geht es sofort gleich wieder zu Portrait. Zwei, die anderen Ansichten sind immer noch in der Lage, Portrait und Landschaft zu sein, und das will ich nicht. Ich brauche bitte Hilfe.

Antwort

0

In meinem AppDelegate, verwende ich diesen Code und stellen Sie sicher, dass nur Portrait-Modus ausgewählt ist:

- (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

ja Sie insbesondere Viewcontroller als Landschaft, indem unten Methode in Ihrem AppDelegate machen kann.

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

dann nehmen Sie eine Bool-Eigenschaft in Ihrem AppDelegate

@property (nonatomic) BOOL restrictRotation; 

und dann in View-Controller, wo Sie wollen Orientierung ändern erstellen AppDelegate Instanz Einschränkung geteilt und lassen wie unten Methode ändern

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

rufen Sie jetzt diese Methode von Ihrem View-Controller und ändern Sie die Ausrichtung wie Sie wollen.

[self restrictRotation:NO]; 

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

und das Wichtigste ist, Format auf Hochformat zu ändern, wenn Ihre Sicht sonst der andere Viewcontroller alle auch in einem Landschaftsmodus wurde verschwinden wird.

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

Ich hoffe, das wird Ihnen helfen.