0

在我的对象初始化方法中

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
        [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(didRotate:)
                                                    name:@"UIDeviceOrientationDidChangeNotification" 
                                                  object:nil];

做旋转方法

- (void) didRotate:(NSNotification *)notification {

    NSLog(@"rotate notification");

    //MA_MobileAppDelegate *appDelegate = (MA_MobileAppDelegate *)[[UIApplication sharedApplication] delegate];

    //UIInterfaceOrientation orientation = appDelegate.tabBarController.interfaceOrientation;
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

由于某种原因,didRotate 似乎在实际旋转之前被调用。因此,当我尝试获取当前/最终旋转时,我得到了最后一个。只有 1 个视图控制器似乎并非如此。任何想法我做错了什么?

4

2 回答 2

1

我不得不延迟我的代码

[self performBlock:^(id sender) {

//rotation code

} afterDelay:0.1f];

短暂的延迟就是给 UIApplication 更新状态栏方向属性的时间:(

于 2012-10-16T21:05:44.323 回答
0

iOS 跟踪两个独立的方向:设备方向 ( [[UIDevice currentDevice] orientation]) 和界面方向 ( [[UIApplication sharedApplication] statusBarOrientation])。设备方向的改变可能会触发界面方向的改变。在系统更改界面方向之前,您会收到设备方向更改通知。

尝试观察UIApplicationDidChangeStatusBarOrientationNotification。它是由 发布的[UIApplication sharedApplication]

于 2012-10-16T21:04:53.933 回答