web-dev-qa-db-fra.com

Comment obtenir l'orientation actuelle de l'appareil par programmation dans iOS 6?

J'ai développé une application iOS et l'ai testée sur un appareil iOS6. Lors des tests, je me suis rendu compte que mon application ne répondait pas aux changements d’orientation prévus.

Voici mon code:

// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

Précisément, je veux savoir quelles méthodes sont appelées pour les changements d'orientation dans iOS.

20
Code Hunter

Vous pouvez essayer ceci, peut vous aider:

Comment modifier l'orientation de l'appareil par programme dans iOS 6

OR

Objectif c:

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]

Rapide:

if UIDevice.current.orientation.isLandscape {
    // Landscape mode
} else {
    // Portrait mode
}
52
Shekhar Gupta

Vous pouvez essayer ceci, ce qui résout votre problème.

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

Voir le lien ci-dessous pour App extensionObtenir l'orientation actuelle du périphérique (App Extension)

36
Girish

Peut-être stupide mais cela fonctionne (uniquement dans ViewController):

if (self.view.frame.size.width > self.view.frame.size.height) {
    NSLog(@"Hello Landscape");
}
6
Lau
  @property (nonatomic) UIDeviceOrientation m_CurrentOrientation ;

/* Vous devez déclarer ce code dans votre ViewDidload ou ViewWillAppear */

- (void)viewDidLoad

   {

   [super viewDidLoad];

   [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

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

/* Maintenant, notre appareil vous avertira chaque fois que nous changerons l'orientation de notre appareil. Vous pourrez ainsi contrôler votre code ou votre programme en utilisant l'orientation actuelle */

- (void)deviceOrientationDidChange:(NSNotification *)notification

 {

 //Obtaining the current device orientation

 /* Where self.m_CurrentOrientation is member variable in my class of type UIDeviceOrientation */

 self.m_CurrentOrientation = [[UIDevice currentDevice] orientation];

    // Do your Code using the current Orienation 

 }
5
Vicky

Suivez la documentation sur UIDevice .

Vous devez appeler 

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

Ensuite, chaque fois que l'orientation sera modifiée, vous recevrez une UIDeviceOrientationDidChangeNotification.

2
Boris Prohaska

Ce tutoriel donne un aperçu simple et agréable de la gestion de la rotation des périphériques à l'aide de UIDeviceOrientationDidChangeNotification. Cela devrait vous aider à comprendre comment utiliser UIDeviceOrientationDidChangeNotification pour être averti lorsque l'orientation du périphérique a changé.

2
Steph Sharp
UIDevice.current.orientation.isLandscape

La réponse acceptée lit l’orientation du périphérique comme ci-dessus, qui peut être signalée différemment de l’orientation de votre ou vos contrôleurs de vue, en particulier si votre périphérique est maintenu dans une position presque horizontale.

Pour obtenir l'orientation de votre view controller , vous pouvez utiliser sa propriété interfaceOrientation, qui est obsolète depuis iOS 8.0 mais qui est toujours correctement signalée.

1
Matt Mc

Dans votre ViewController, vous pouvez utiliser la méthode didRotateFromInterfaceOrientation: pour détecter la rotation du périphérique, puis procédez comme vous le souhaitez, dans toutes les orientations. 

Exemple:

#pragma mark - Rotation

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    switch (orientation) {
        case 1:
        case 2:
            NSLog(@"portrait");
            // your code for portrait...
            break;

        case 3:
        case 4:
            NSLog(@"landscape");
            // your code for landscape...
            break;
        default:
            NSLog(@"other");
            // your code for face down or face up...
            break;
    }
}
0
eduludi