0

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

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

它仅适用于我UIViewController添加的第一个appdelegate。但它不适用于其他UIViewControllers并调用selector事件。是什么原因?我是否应该将其他内容添加view controllers到 appdelagate。


方法中的代码示例Orientchanged:

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

2 回答 2

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

    }
}
于 2013-08-02T02:27:29.023 回答
1

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

如果您想全局了解,请在appDelegate.

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

编辑:观察者取决于它包含的位置。在您的情况下addObserver:self,这self是您的第一个视图控制器。

于 2012-12-31T09:35:44.463 回答