设备方向更改了在主视图控制器以外的其他控制器中未调用的通知事件

时间:2012-12-31 09:20:20

标签: iphone objective-c ios ios6

在我的应用程序中,我有3个视图控制器,每个视图控制器都通过按钮单击导航。在我的第一个视图控制器中,我添加了命令

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

它仅适用于UIViewController中添加的第一个appdelegate。但它不适用于其他UIViewControllers并致电selector事件。是什么原因?我应该向appdelagate添加其他view controllers


Orientchanged:方法中的代码示例:

- (void)Orientchanged:(NSNotification *)notification 
{
    UIDeviceOrientation devOrientation = [UIDevice currentDevice].orientation;
    scrollWidth_L = 1024;
    scrollWidth_P = 768;
}

2 个答案:

答案 0 :(得分:3)

添加以下方法:

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

-(void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];

    UIInterfaceOrientation devOrientation = self.interfaceOrientation;
    CGFloat scrollWidth_L = self.view.bounds.size.width;
    CGFloat scrollWidth_P = self.view.bounds.size.height;

    if (UIInterfaceOrientationLandscapeLeft == devOrientation || UIInterfaceOrientationLandscapeRight == devOrientation) {
        // Code for landscape setup

    } else {
        // Code for portrait setup

    }
}

答案 1 :(得分:1)

您已为特定viewController添加了观察者。您必须添加所有其他viewController以了解当前可见的viewController方向已更改。

如果您想全局了解,请在appDelegate添加观察者。

注意:不要忘记在不需要时删除observer

编辑:观察者取决于它所包含的位置。在您的案例addObserver:self中,self是您的第一个视图控制器。