在我的应用程序中,我有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;
}
答案 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
是您的第一个视图控制器。