0

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

- (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。为什么会这样?以及如何正确知道方向?

4

5 回答 5

1

尝试使用

[UIApplication sharedApplication].statusBarOrientation

代替

[UIDevice currentDevice].orientation
于 2012-05-16T12:41:08.230 回答
0

可能是模拟器根本无法处于定向状态(这没有任何意义,因为您无法真正旋转计算机......)您是否检查过它是否返回UIDeviceOrientationUnknown

于 2012-05-16T12:39:40.777 回答
0

文档或 UIDevice 状态:

您可以使用方向属性获取当前方向,或者通过注册 UIDeviceOrientationDidChangeNotification 通知来接收更改通知。在使用这些技术中的任何一种获取方向数据之前,您必须使用 beginGeneratingDeviceOrientationNotifications 方法启用数据传递

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

因此,您可能会得到未知方向,因为您从未开始生成方向通知。

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

于 2012-05-16T12:41:50.607 回答
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的委托方法。
于 2012-05-16T12:41:55.533 回答
0

根据docs,除非首先调用,否则 的orientation属性UIDevice将始终返回 0(即)。此方法将启用加速度计,传递通知更改,并更新单例的属性。UIDeviceOrientationUnknown-beginGeneratingDeviceOrientationNotificationsorientationUIDevice

于 2012-05-16T12:42:12.990 回答