55 votes

iOS: orientation de l'appareil en charge

Il semble que lorsque mon application se charge, elle ne connaît pas son orientation actuelle:

 UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIDeviceOrientationPortrait) {
    NSLog(@"portrait");// only works after a rotation, not on loading app
}
 

Une fois que je fais pivoter l'appareil, j'obtiens une orientation correcte, mais lorsque je charge l'application, sans changer d'orientation, il semble que l'utilisation de [[UIDevice currentDevice] orientation] ne connaisse pas l'orientation actuelle.

Existe-t-il un autre moyen de vérifier cela lors du premier chargement de mon application?

66voto

groomsy Points 2350

EDIT: j'ai mal lu votre question. Cela vous permettra de démarrer votre application dans certaines orientations. Viens de réaliser que vous êtes à essayer de comprendre l'orientation sur le lancement.

Il existe une méthode pour vérifier l'état de la barre d'orientation sur l' UIApplication:

[[UIApplication sharedApplication] statusBarOrientation];

Réponse originale à cette question

Essayez de définir la demande est acceptée appareil orientations dans le fichier plist:

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>

Cela indique que votre application prend en charge le mode Portrait (bouton home en bas), le paysage à gauche, et le paysage à droite.

Puis, dans votre UIViewControllers, vous aurez besoin de remplacer le shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) méthode pour retourner OUI lorsque l'application doit tourner:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

     return interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight;
}

Cela indiquera à la UIViewController de rotation automatique si l'appareil est dans l'un de vos orientations. Si vous vouliez à l'appui de la tête à l'envers orientation (portrait à la maison de bouton sur le dessus) puis ajoutez-le à votre plist et juste retour OUI de cette méthode.

Laissez-nous savoir comment cela fonctionne.

11voto

Iducool Points 1427

Je pense que cela va fonctionner:

 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];UIInterfaceOrientation orientation = [UIDevice currentDevice].orientation;

Selon le UIDevice de référence:
Citation:
"La valeur de cette propriété renvoie toujours 0, à moins que l'orientation des notifications ont été activées par l'appel de beginGeneratingDeviceOrientationnotifications"
J'avais d'abord cru que cette propriété présente l'orientation actuelle à tout moment, mais il n'est pas, apparemment. Je suppose que l'activation des notifications est géré pour nous derrière les scènes dans d'autres situations où l'orientation de la propriété est accessible généralement, de sorte qu'il n'était pas évident que cela doit être fait manuellement à l'intérieur de l'app délégué

2voto

Jeff Kelley Points 12893

Une chose que personne n'a abordé encore est que vous stockez UIDeviceOrientation types en UIInterfaceOrientation variable. Ils sont différents et ne doivent pas être traités comme des égaux. Notez que UIDeviceOrientationLeft est égal à UIInterfaceOrientationRight (puisque l'interface tourne dans le sens inverse par rapport à l'appareil).

2voto

Aragon Points 252

Vous pouvez le faire en insérant la notification suivante dans

 -(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érifie l’orientation de la barre d’état de l’ipad ou de l’iPhone et vous permet de faire votre animation dans l’orientation requise.

0voto

iksnae Points 367

le problème est que [UIDevice currentDevice]orientation] rapporte parfois de manière incorrecte l'orientation du périphérique.

utilisez plutôt [[UIApplication sharedApplication]statusBarOrientation] qui est un UIInterfaceOrientation afin de le vérifier, vous devrez utiliser les UIInterfaceOrientationIsLandscape(orientation)

J'espère que cela t'aides.

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