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.
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
}
Sie können dies versuchen, um Ihr Problem zu lösen.
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
Siehe untenstehender Link für App extension
Aktuelle Ausrichtung des Geräts abrufen (App-Erweiterung)
Vielleicht blöd, aber es funktioniert (nur in ViewController):
if (self.view.frame.size.width > self.view.frame.size.height) {
NSLog(@"Hello Landscape");
}
@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
}
Befolgen Sie die Dokumentation zu UIDevice .
Sie müssen anrufen
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
Bei jeder Änderung der Ausrichtung erhalten Sie dann eine UIDeviceOrientationDidChangeNotification.
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.
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.
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;
}
}