如何正确了解设备方向

时间:2012-05-16 12:36:47

标签: iphone ipad device-orientation

我想知道用户启动我的应用时的设备方向,以便产生不同的视图。我觉得奇怪的是如下:

- (void)viewDidLoad
{
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait) {
        NSLog(@"1");
    }
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) {
        NSLog(@"2");
    }
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft) {
        NSLog(@"3");
    }
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortraitUpsideDown) {
        NSLog(@"4");
    }
}

没有人打印!我在ipad模拟器上做到了,我认为方向应该是UIDeviceOrientationPortrait。为什么会这样?以及如何正确了解方向?

5 个答案:

答案 0 :(得分:1)

尝试使用

[UIApplication sharedApplication].statusBarOrientation

而不是

[UIDevice currentDevice].orientation

答案 1 :(得分:0)

可能是模拟器根本不能处于方向状态(这没有意义,因为你无法真正旋转你的计算机......)你检查过它是否会返回UIDeviceOrientationUnknown吗? / p>

答案 2 :(得分:0)

文档或UIDevice声明:

  

您可以使用orientation属性获取当前方向   通过注册接收更改通知   UIDeviceOrientationDidChangeNotification通知。使用前   要获得方向数据,要么必须启用这些技术   使用beginGeneratingDeviceOrientationNotifications进行数据传递   方法

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

因此,您可能因为从未启动过方向通知生成而获得未知方向。

您还应该在viewDidLoad中记录该值,以确切确认获得方向时收到的内容。这将是进一步调查的良好起点。

答案 3 :(得分:0)

Use this :-

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {      
if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)     
{       
 //code for portrait   

 }            
else      
{         //code for Landscape 

  }     
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationPortrait ||interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
} 
  • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation是uiviewcontroller的委托方法。

答案 4 :(得分:0)

根据the docsorientation的{​​{1}}属性将始终返回0(即UIDevice),除非首先调用UIDeviceOrientationUnknown。此方法将启用加速度计,发送通知更改,并更新-beginGeneratingDeviceOrientationNotifications单例的orientation属性。