Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iOs] passer sur une autre vue en cas de rotation

    16 août 2012 à 5:51:35

    Bonjour,

    J'essaye de changer de vue lors d'une rotation, mais cela ne fonctionne pas, et je ne vois pas pourquoi:

    Sur xcode 4.4, j'ai fait un projet single view.
    Dans mon storyboard j'ai deux vue: ViewController1 (portrait) et ViewController2 (paysage).

    L'utilisateur arrive sur la vue 1, dans un premier temps j'essaye uniquement de passer du format portrait au format paysage. Donc de la vue 1 sur la vue 2.

    ViewController1.m
    #import "ViewController1.h"
    #import "ViewController2.h"
    
    @interface ViewController1 ()
    
    @end
    
    @implementation ViewController1
    
    // code sans importance
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged) name:@"UIdeviceOrientationChanged" object:nil];
    	// Do any additional setup after loading the view.
    }
    
    //code sans importance
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return YES;
    }
    
    - (void) orientationChanged:(NSNotification *)object
    {
        UIDeviceOrientation deviceOrientation = [[object object] orientation];
        ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:nil bundle:nil];
                                  
         if( deviceOrientation == UIInterfaceOrientationLandscapeLeft || deviceOrientation == UIInterfaceOrientationLandscapeRight)
        {
            [self presentModalViewController:vc2 animated:YES];
        }
    }
    
    @end
    
    • Partager sur Facebook
    • Partager sur Twitter
      18 août 2012 à 13:11:24

      Tu t'y prends mal. Tu te compliques la vie pour rien, la rotation est automatiquement gérée par le système. Voilà un exemple pour te donner des pistes

      #pragma mark -  Orientation Management
      
      - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
          return YES;
      }
      
      
      - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
      {
          float rotation;
          
          if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {
              rotation = 0;
          }
          else if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft) {
              rotation = M_PI_2;
          }
          else if (toInterfaceOrientation==UIInterfaceOrientationLandscapeRight) {
              rotation = -M_PI_2;
          }
          else {
              rotation = M_PI;
          }
          
          [UIView animateWithDuration:duration animations:^{
              self.containerView.transform = CGAffineTransformMakeRotation(rotation);
          }];    
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        20 août 2012 à 4:25:09

        Le soucis de la rotation automatique c'est que le repositionnement des éléments de la vue n'est pas top. J'ai des certaines pages assez rempli et j'aimerais positionner moi meme les différents éléments.
        • Partager sur Facebook
        • Partager sur Twitter
          20 août 2012 à 12:29:09

          Il n'y a aucun soucis, tu changes l'offset de tes composants dans la méthode willRotateToInterfaceOrientation: en fonction de l'orientation courante :

          if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation) {
          // Tu changes l'offset ici
          } else {
          // Pareil ici
          }
          


          Sinon t'as pensé à bien paramétrer l'autosizing de tes composants dans le xib si t'en utilises un?

          Image utilisateur
          • Partager sur Facebook
          • Partager sur Twitter

          [iOs] passer sur une autre vue en cas de rotation

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown