62 votes

Obtenir l'orientation actuelle de l'iPad ?

Dans un gestionnaire d'événement donné (pas la méthode "shouldAutorotateToInterfaceOrientation") comment puis-je détecter l'orientation actuelle de l'iPad ? J'ai un champ de texte que je dois animer vers le haut (lorsque le clavier apparaît) dans la vue paysage, mais pas dans la vue portrait et je veux savoir dans quelle orientation je me trouve pour voir si l'animation est nécessaire.

133voto

Paul Lynch Points 13774

Les informations sur l'orientation ne sont pas très cohérentes, et il existe plusieurs approches. Si vous êtes dans un contrôleur de vue, vous pouvez utiliser la fonction interfaceOrientation propriété. Vous pouvez appeler d'autres endroits :

[[UIDevice currentDevice] orientation]

Vous pouvez également demander à recevoir des notifications de changement d'orientation :

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];

Certaines personnes aiment aussi vérifier l'orientation de la barre d'état :

[UIApplication sharedApplication].statusBarOrientation

34voto

Samuel Points 301

Je pense

[[UIDevice currentDevice] orientation];

n'est pas vraiment fiable. Parfois ça marche, parfois non... Dans mes applications, j'utilise

[[UIApplication sharedApplication]statusBarOrientation]; 

et ça marche très bien !

9voto

KennyTM Points 232647

Un de :

  • Vérifiez le interfaceOrientation du contrôleur de vue actif.
  • [UIApplication sharedApplication].statusBarOrientation .
  • [UIDevice currentDevice].orientation . (Vous devrez peut-être appeler -beginGeneratingDeviceOrientationNotifications .)

8voto

Chris Allinson Points 323

J'ai trouvé une astuce pour résoudre le problème d'orientation de FaceUp ! !!

Retardez la vérification de l'orientation jusqu'à APRÈS le lancement de l'application, puis définissez les variables, les tailles d'affichage, etc.

//CODE

- (void)viewDidLoad {

  [super viewDidLoad];

  //DELAY
  [NSTimer scheduledTimerWithTimeInterval:0.5 
                     target:self 
                     selector:@selector(delayedCheck) 
                     userInfo:nil 
                     repeats:NO];

}

-(void)delayedCheck{

  //DETERMINE ORIENTATION
  if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait ){
      FACING = @"PU";
  }
  if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown ){
      FACING = @"PD";
  }
  if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft ){
      FACING = @"LL";
  }
  if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight ){
      FACING = @"LR";
  } 
  //DETERMINE ORIENTATION

  //START
  [self setStuff];
  //START

}

-(void)setStuff{

  if( FACING == @"PU" ){
          //logic for Portrait
  }
  else
  if( FACING == @"PD" ){
          //logic for PortraitUpsideDown
  }
  else{ 
  if( FACING == @"LL"){
          //logic for LandscapeLeft
  }
  else
  if( FACING == @"LR" ){
          //logic for LandscapeRight
  }

}

//CODE
Vous pouvez ajouter des sous-vues, positionner des éléments, etc. dans la fonction "setStuff"... tout ce qui dépendrait initialement de l'orientation !!!

D

-Chris Allinson

3voto

Aragon Points 252

Vous pouvez y parvenir de deux manières :

1- En utilisant la méthode suivante :

**Mettez la ligne suivante dans le fichier -(void)viewDidLoad Méthode :

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceRotated:) name:UIDeviceOrientationDidChangeNotification object:nil];

puis mettez cette méthode dans votre classe

-(void)deviceRotated:(NSNotification*)notification
{

   UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
    {
        //Do your textField animation here
    }
}

La méthode ci-dessus vérifiera l'orientation lorsque le dispositif sera tourné.

2- La deuxième façon est d'insérer la notification suivante à l'intérieur -(void)viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkRotation:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];

puis mettez la méthode suivante dans votre classe

-(void)checkRotation:(NSNotification*)notification
{
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
    {
         //Do your textField animation here
    }
}

La méthode ci-dessus vérifiera l'orientation de la barre d'état de l'ipad ou de l'iPhone et en fonction de celle-ci vous ferez votre animation dans l'orientation requise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X