如何获得设备的当前方位编程中的iOS 6?(How to get current orientati

2019-07-05 00:10发布

我已经开发了一个iOS应用程序并测试其iOS6的设备上。 测试时,我意识到,预期我的应用程序没有响应取向变化。

这是我的代码:

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

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

准确地说,我想知道,什么方法都要求在iOS的取向的变化。

Answer 1:

你可以试试这个,可以帮助你:

如何以编程方式更改设备取向的iOS 6

要么

Objective-C的:

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]

迅速:

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


Answer 2:

你可以试试这个,这解决您的问题。

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

请参考以下链接, App extension 获取设备当前的方向(应用程序扩展)



Answer 3:

也许愚蠢的,但它是工作(仅在视图控制器):

if (self.view.frame.size.width > self.view.frame.size.height) {
    NSLog(@"Hello Landscape");
}


Answer 4:

  @property (nonatomic) UIDeviceOrientation m_CurrentOrientation ;

/ *您需要在您的viewDidLoad或viewWillAppear中声明这些代码* /

- (void)viewDidLoad

   {

   [super viewDidLoad];

   [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

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

/ *现在我们的设备将提供一个通知,每当我们改变设备的方向,所以,你可以控制使用当前方位代码或程序* /

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

 }


Answer 5:

按照该文件的UIDevice 。

你需要调用

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

然后每次方向改变时,您将收到一个UIDeviceOrientationDidChangeNotification。



Answer 6:

本教程提供了如何利用处理设备旋转一个很好的和简单的概述UIDeviceOrientationDidChangeNotification 。 它应该帮助您了解如何使用UIDeviceOrientationDidChangeNotification通知当设备方向发生了变化。



Answer 7:

UIDevice.current.orientation.isLandscape

接受的答案读取设备的如上述的取向,其可不同于视图控制器(一个或多个)的定向被报告,特别是如果设备在几乎水平的位置上。

为了让您的视图控制器的方向明确,你可以用它interfaceOrientation的性质,因为iOS的8.0它被废弃了,但仍然可以正确地报告。



Answer 8:

在您的视图控制器,你可以使用didRotateFromInterfaceOrientation:方法时,该设备已被旋转来检测,然后做任何你在每一个方向的需要。

例:

#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;
    }
}


文章来源: How to get current orientation of device programmatically in iOS 6?