2016-04-22 5 views
5

Jest to nazwa pliku nadklasy Apporientationviewcontroller.h/m. I nazywam tę superklasę we wszystkich innych podklasach. Jeśli więc "isPortraitModeONN" jest "ON" , wówczas cały ekran powinien działać tylko w trybie pionowym. jeśli użytkownik spróbuje zmienić urządzenie na krajobraz, nie powinien się obracać. powinien być zawsze w trybie portretu, jeśli przełącznik jest "ON". W moim przypadku podczas śmiechu aplikacja działa w trybie portretu. ale jeśli obracam ekran, zmienia się w kierunku poziomym. ale to nie powinno zmienić swoją orientację aż obracając OFF przełącznik w ustawieniach ..Jak wymusić orientację wszystkich ekranów, aby były w trybie portretu, jeśli przełącznik jest włączony? jeśli użytkownik obraca, nie powinien zmieniać swojej orientacji

if(isPortraitModeONN) 
    { 
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 
    } 
    else 
    { 
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft){ 
     [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 
    } 
    else if([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) 
    { 
     [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeLeft]; 
    } 
    else{ 
     [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 
    } 
} 

Odpowiedz

3

Ten kod działa dla mnie nieco ..

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator: (id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
///if isPortraitMode On then force the orientation to portrait if it's other than Portrait 
///else force the orientation to landscape 

if (isPortraitModeONN) 
{ 
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) 
    { 
     // do whatever 
     UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
     if (UIInterfaceOrientationIsLandscape(orientation)) { 
      ///App is rotating to landscape, force it to portrait 
      NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait]; 
      [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; 
     } 
    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) 
    { 

    }]; 
} 
else{ 

    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) 
    { 
     // do whatever 
     UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
     if (UIInterfaceOrientationIsPortrait(orientation)) { 
      ///App is rotating to portrait, force it to landscape 
      NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight]; 
      [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; 
     } 
    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) 
    { 
    }]; 
    } 
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 
0

Goto Target -> Informacje Deployment -> zestaw urządzenie Orientacja na pionową tylko

enter image description here

As par Twoje pytanie, jeśli chcesz to zrobić, dotykając przycisku Proszę spróbuj tego kodu Nie jestem pewien, czy to działa na twoim projekcie, ale działa dla mojego dummy projektu spróbuj go

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

zmiana orientacji urządzenia dla obu przycisków

+0

to działa czy nie? –

+0

Dziękuję za Twój komentarz .. jeśli postąpię zgodnie z tą procedurą, aplikacja będzie działać tylko w trybie portretowym. Ale aplikacja moja powinna również obsługiwać orientację poziomą .. Jeśli przełącznik portretowy ma wartość "OFF", powinien działać tylko w trybie poziomym. Mój proces polega na tym, (i) jeśli Przełącznik Portretu jest "WŁĄCZONY", wówczas aplikacja powinna działać w trybie portretowym, tylko jeśli użytkownik obraca ekran, nie powinien zmieniać swojej orientacji. (ii) jeśli Przełącznik Portretu jest "WYŁĄCZONY", to aplikacja powinna działać w trybie poziomym, tylko jeśli użytkownik obraca ekran, nie powinien zmieniać swojej orientacji. – Nithya

+0

proszę sprawdzić zaktualizowaną odpowiedź –

0

kod powinien być taki,

AppDelegate.h

@property() BOOL restrictRotation; 
-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window; 

AppDelegate.m

-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    if(self.restrictRotation) 
    return UIInterfaceOrientationMaskLandscape; //you can change upsidedown etc 
else 
    return UIInterfaceOrientationMaskPortrait; // you can change landscape right or left only 

//this should be your initial app orientation because by default value of bool is false 
} 

SettingsViewController (skąd chcesz zmienić całe kierunki aplikacji)

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

nie zapomnij importować appdelegate.h;)

a wreszcie z przełącznika zmiany orientacji,

[self restrictRotation:YES]; // or NO 

można manipulować supportedInterfaceOrientationsForWindow jak na wymagania jak możesz ustawić właściwość jako int zamiast bool i możesz ustawić wiele orientacji dla różnych wartości int.

nadzieję, że pomoże :)

0

Można zrobić jak to-

  1. ADD - @property() BOOL isPortraitModeONN; w AppDelegate.hclass.
  2. teraz zakodować to w AppDelegate.m -

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    
        self.isPortraitModeONN=YES; 
    
        return YES; 
    } 
    
    -(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
        { 
    
         if(self.isPortraitModeONN) 
          return UIInterfaceOrientationMaskPortrait; 
         else 
          return UIInterfaceOrientationMaskLandscape; 
    
        } 
    
  3. teraz Dodaj IBAction z UIButton do zmiany orientacji w Apporientationviewcontroller.m -

    - (IBAction)changeOrientation:(id)sender { 
    
        if (allowedToRotate) { 
    
         allowedToRotate=NO; 
    
         AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; 
    
         appDelegate.isPortraitModeONN = NO; 
    
         NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft]; 
    
         [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; 
    
         }else{ 
    
         allowedToRotate=YES; 
    
         AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; 
    
         appDelegate.isPortraitModeONN = YES; 
    
         NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait]; 
    
         [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; 
    
        } 
        } 
    

określić w Apporientationviewcontroller.mBOOL allowedToRotate; wartość domyślna to YES;

Powiązane problemy