3 votes

Gestion de l'orientation des appareils iOS

Je rencontre des problèmes avec mes UIViews en fonction de l'orientation des appareils...

Le principal problème que j'ai est que

UIDeviceOrientationFaceUp
UIDeviceOrientationFaceDown

impactent ma vue, je veux seulement supporter le mode Portrait et Paysage (gauche droite) donc si l'appareil change d'orientation ma vue se modifie correctement..

voici ce que j'ai implémenté pour le moment. Fondamentalement, c'est une UIView qui défile vers le haut depuis le bas de l'écran et contient plusieurs boutons dans cette vue que l'utilisateur peut sélectionner pour charger une vue différente.

#pragma jumpBarButtons
- (void)jumpBarButtonPosition
{

    //trucs d'orientation
    if (jumpBar.isViewLoaded) {

        UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

        switch (orientation) {
            case UIDeviceOrientationPortrait:
            {
                NSLog(@"Portrait");

                // Ligne une
                jumpButton1.frame = CGRectMake(18.45, 23.0, 57.0, 57.0);
                jumpButton2.frame = CGRectMake(93.9, 23.0, 57.0, 57.0);
                jumpButton3.frame = CGRectMake(169.35, 23.0, 57.0, 57.0);
                jumpButton4.frame = CGRectMake(244.8, 23.0, 57.0, 57.0);
                // Ligne deux
                jumpButton5.frame = CGRectMake(18.45, 95.0, 57.0, 57.0);
                jumpButton6.frame = CGRectMake(93.9, 95.0, 57.0, 57.0);
                jumpButton7.frame = CGRectMake(169.35, 95.0, 57.0, 57.0);
                jumpButton8.frame = CGRectMake(244.8, 95.0, 57.0, 57.0);
                // Ligne trois
                jumpButton9.frame = CGRectMake(18.45, 167.0, 57.0, 57.0);
                jumpButton10.frame = CGRectMake(93.9, 167.0, 57.0, 57.0);
                jumpButton11.frame = CGRectMake(169.35, 167.0, 57.0, 57.0);
                jumpButton12.frame = CGRectMake(244.8, 167.0, 57.0, 57.0);
                // Ligne quatre
                jumpButton13.frame = CGRectMake(18.45, 239.0, 57.0, 57.0);
                jumpButton14.frame = CGRectMake(93.9, 239.0, 57.0, 57.0);
                jumpButton15.frame = CGRectMake(169.35, 239.0, 57.0, 57.0);
                jumpButton16.frame = CGRectMake(244.8, 239.0, 57.0, 57.0);
            }
                break;

case UIDeviceOrientationLandscapeLeft:
            case UIDeviceOrientationLandscapeRight:
            {
                viewSpaceHeight = 207;
                viewSpaceWidth = 480;

                // Ligne une
                jumpButton1.frame = CGRectMake(19.7, 9.0, 57.0, 57.0);
                jumpButton2.frame = CGRectMake(96.42, 9.0, 57.0, 57.0);
                jumpButton3.frame = CGRectMake(173.13, 9.0, 57.0, 57.0);
                jumpButton4.frame = CGRectMake(249.84, 9.0, 57.0, 57.0);
                jumpButton5.frame = CGRectMake(326.55, 9.0, 57.0, 57.0);
                jumpButton6.frame = CGRectMake(403.26, 9.0, 57.0, 57.0);
                // Ligne deux
                jumpButton7.frame = CGRectMake(19.7, 75.0, 57.0, 57.0);
                jumpButton8.frame = CGRectMake(96.42, 75.0, 57.0, 57.0);
                jumpButton9.frame = CGRectMake(173.13, 75.0, 57.0, 57.0);
                jumpButton10.frame = CGRectMake(249.84, 75.0, 57.0, 57.0);
                jumpButton11.frame = CGRectMake(326.55, 75.0, 57.0, 57.0);
                jumpButton12.frame = CGRectMake(403.26, 75.0, 57.0, 57.0);
                // Ligne trois
                jumpButton13.frame = CGRectMake(19.7, 141.0, 57.0, 57.0);
                jumpButton14.frame = CGRectMake(96.42, 141.0, 57.0, 57.0);
                jumpButton15.frame = CGRectMake(173.13, 141.0, 57.0, 57.0);
                jumpButton16.frame = CGRectMake(249.84, 141.0, 57.0, 57.0);

            }
                break;
//..

c'est à peu près tout, en mode portrait il y a 16 icônes en 4x4, en paysage il y a 6 icônes en 6x4. Ce qu'il se passe si l'appareil est retourné face vers le haut ou vers le bas, toutes ces vues de boutons disparaissent.. Que puis-je faire pour arrêter cela, toute aide serait grandement appréciée.

3voto

Phlibbo Points 3536

Utilisez UIInterfaceDirection à la place. Cela fait partie de la classe UIApplication et contient uniquement les valeurs suivantes

typedef enum {
   UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
   UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
   UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
   UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;

Vous pouvez facilement vérifier votre orientation actuelle comme ceci :

[[UIApplication sharedApplication] statusBarOrientation]

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