UIDevice currentDevice的“orientation”始终为null

时间:2010-03-17 10:08:34

标签: iphone objective-c orientation uidevice interface-orientation

根据标题。 调用[[UIDevice currentDevice] BeginGeneratingDeviceOrientationNotifications]无效。

DidRotateToInterfaceOrientation等事件工作正常,但我需要能够任意轮询设备方向。

我该如何修复/做到这一点?

长篇故事: 我有一个标签应用程序,每个选项卡上都有一个导航控制器第一个选项卡的根视图是当方向变为横向时全屏显示的图形;但是,每当视图出现时都需要检查,因为方向更改可能在其他地方发生,所以我希望每次出现此视图时都会轮询方向状态。

5 个答案:

答案 0 :(得分:9)

UIDevice的方向概念似乎只能在实际设备上使用。无论是否已按照文档建议启用通知,模拟器似乎总是在此处返回0。非常不方便,但你去了。

我发现这在实际设备上运行良好:

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    NSLog(@"orientation: %d", [[UIDevice currentDevice] orientation]);
    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

答案 1 :(得分:2)

似乎是一个愚蠢的问题,但不是吗

  

beginGeneratingDeviceOrientationNotifications

(小写字母b) ...

答案 2 :(得分:1)

如果您在[[UIDevice currentDevice] orientation]中查看- (void)viewDidLoad,则总是为零。

在* - (void) viewDidAppear:(BOOL) *动画方法中查看,然后

答案 3 :(得分:1)

这是根据iMeMyself在上面的评论中所说的 - 这同样是我很多时间,我认为是正确的答案,所以我想在这里强调一下:

UIDeviceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;

if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
{
   //do stuff here
}
else if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
{
//or do stuff here
}

答案 4 :(得分:0)

[[UIDevice currentDevice]方向]不会给你当前的方向状态吗?您可以在想要轮询的视图控制器的viewWillAppear方法中检查这一点。

编辑:除此之外,有多种方法可以获取当前方向,例如使用UIApplication中的statusBarOrientation属性或UIViewcontroller中的interfaceOrientation属性。