web-dev-qa-db-de.com

Wie kann ich die aktuelle Ausrichtung des Geräts unter iOS 6 programmgesteuert erhalten?

Ich habe eine iOS-App entwickelt und auf iOS6-Geräten getestet. Beim Testen stellte ich fest, dass meine App nicht wie erwartet auf Orientierungsänderungen reagiert.

Hier ist mein Code:

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

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

Ich möchte genau wissen, welche Methoden bei Orientierungsänderungen in iOS aufgerufen werden.

20
Code Hunter

Du kannst es versuchen, vielleicht hilft es dir:

So ändern Sie die Geräteorientierung in iOS 6 programmgesteuert

OR

Ziel c:

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]

Swift:

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

Sie können dies versuchen, um Ihr Problem zu lösen.

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

Siehe untenstehender Link für App extensionAktuelle Ausrichtung des Geräts abrufen (App-Erweiterung)

36
Girish

Vielleicht blöd, aber es funktioniert (nur in ViewController):

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

/* Sie müssen diesen Code in ViewDidload oder ViewWillAppear */angeben.

- (void)viewDidLoad

   {

   [super viewDidLoad];

   [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

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

/* Jetzt gibt unser Gerät eine Benachrichtigung aus, wenn wir die Ausrichtung unseres Geräts ändern. So können Sie Ihren Code oder Ihr Programm anhand der aktuellen Ausrichtung steuern. */

- (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

Befolgen Sie die Dokumentation zu UIDevice .

Sie müssen anrufen 

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

Bei jeder Änderung der Ausrichtung erhalten Sie dann eine UIDeviceOrientationDidChangeNotification.

2
Boris Prohaska

Dieses Tutorial gibt einen schönen und einfachen Überblick über den Umgang mit der Gerätedrehung mit UIDeviceOrientationDidChangeNotification. Es sollte Ihnen helfen zu verstehen, wie Sie mit UIDeviceOrientationDidChangeNotification benachrichtigt werden, wenn sich die Geräteorientierung geändert hat.

2
Steph Sharp
UIDevice.current.orientation.isLandscape

Die akzeptierte Antwort liest die Ausrichtung des Geräts wie oben, was anders als die Ausrichtung Ihres View Controllers angezeigt werden kann, insbesondere wenn Ihr Gerät in einer nahezu horizontalen Position gehalten wird.

Um die Ausrichtung Ihres view-Controllers zu ermitteln, können Sie insbesondere die interfaceOrientation -Eigenschaft verwenden, die seit iOS 8.0 veraltet ist, aber weiterhin ordnungsgemäß berichtet.

1
Matt Mc

In Ihrem ViewController können Sie die didRotateFromInterfaceOrientation:-Methode verwenden, um festzustellen, wann das Gerät gedreht wurde, und dann in jeder Ausrichtung alles tun, was Sie brauchen. 

Beispiel:

#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