我一直在尝试几种方法让旋转按预期工作,但到目前为止我一直遇到一些问题。
现在我想让一个类包含一个包含2个方向视图的xib文件。一个用于肖像,一个用于景观。
我在我的主ViewController中尝试这个(在app delegate中设置的根控制器。但不知怎的,它失败了:当我旋转时,视图被切换但出口没有旋转。例如,横向视图中的简单标签将显示为设备处于纵向模式。
以下是代码:
在我的app delegate
中if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
} else {
//self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil withOrientation:UIInterfaceOrientationPortrait];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
self.window.rootViewController = self.viewController;
在Viewcontroller.m中
- (void)viewDidLoad
{
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
[self performSelector:@selector(updateLandscapeView2) withObject:nil afterDelay:0];
}
- (void)updateLandscapeView2
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation))
{
self.view = self.landscapeView;
[[NSNotificationCenter defaultCenter] postNotificationName:@"landscape" object:nil];
}
else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
{
self.view = self.portraitView;
[[NSNotificationCenter defaultCenter] postNotificationName:@"portrait" object:nil];
}
}
我打算使用本地通知将方向更改转发到Viewcontroller的子视图。
无论如何,我在这里错过了什么?我不明白为什么会失败。
答案 0 :(得分:0)
我发现的是当你打电话时
[UIDevice currentDevice].orientation
在
的上下文中[viewController performSelector .....]
它不起作用。
某些机构有这些解决方案吗?